From 1b7ecd111d7442a638ea56f679469cadb0be080b Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 5 Feb 2007 14:57:57 +0000 Subject: [PATCH] import of dnsmasq-2.37.tar.gz --- CHANGELOG | 36 ++ dnsmasq.conf.example | 17 +- doc.html | 3 +- hosts | 2 - man/dnsmasq.8 | 83 ++++- po/de.po | 234 ++++++------- po/es.po | 242 +++++++------- po/fi.po | 234 ++++++------- po/fr.po | 243 +++++++------- po/id.po | 245 +++++++------- po/it.po | 234 ++++++------- po/no.po | 242 +++++++------- po/pl.po | 240 +++++++------- po/pt_BR.po | 234 ++++++------- po/ro.po | 242 +++++++------- src/cache.c | 50 ++- src/config.h | 2 +- src/dnsmasq.c | 8 +- src/dnsmasq.h | 5 +- src/forward.c | 2 +- src/lease.c | 2 +- src/option.c | 9 +- src/rfc1035.c | 27 +- src/rfc2131.c | 769 ++++++++++++++++++++++++++----------------- src/tftp.c | 248 +++++++------- 25 files changed, 2013 insertions(+), 1640 deletions(-) delete mode 100644 hosts diff --git a/CHANGELOG b/CHANGELOG index 5a86279..b230603 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2086,4 +2086,40 @@ version 2.36 as not to affect the validity of the signature. This should allow DDNS updates to be forwarded. +version 2.37 + Add better support for RFC-2855 DHCP-over-firewire and RFC + -4390 DHCP-over-InfiniBand. A good suggestion from Karl Svec. + + Some efficiency tweaks to the cache code for very large + /etc/hosts files. Should improve reverse (address->name) + lookups and garbage collection. Thanks to Jan 'RedBully' + Seiffert for input on this. + + Fix regression in 2.36 which made bogus-nxdomain + and DNS caching unreliable. Thanks to Dennis DeDonatis + and Jan Seiffert for bug reports. + + Make DHCP encapsulated vendor-class options sane. Be + warned that some conceivable existing configurations + using these may break, but they work in a much + simpler and more logical way now. Prepending + "vendor:" to an option encapsulates it + in option 43, and the option is sent only if the + client-supplied vendor-class substring-matches with + the given client-id. Thanks to Dennis DeDonatis for + help with this. + + Apply patch from Jan Seiffert to tidy up tftp.c + + Add support for overloading the filename and servername + fields in DHCP packet. This gives extra option-space when + these fields are not being used or with a modern client + which supports moving them into options. + + Added a LIMITS section to the man-page, with guidance on + maximum numbers of clients, file sizes and tuning. + + + + diff --git a/dnsmasq.conf.example b/dnsmasq.conf.example index adad609..210e14e 100644 --- a/dnsmasq.conf.example +++ b/dnsmasq.conf.example @@ -262,13 +262,20 @@ # Send RFC-3442 classless static routes (note the netmask encoding) #dhcp-option=121,192.168.1.0/24,1.2.3.4,10.0.0.0/8,5.6.7.8 -# Send encapsulated vendor-class specific options. The vendor-class -# is sent as DHCP option 60, and all the options marked with the -# vendor class are send encapsulated in DHCP option 43. The meaning of -# the options is defined by the vendor-class. This example sets the -# mtftp address to 0.0.0.0 for PXEClients +# Send vendor-class specific options encapsulated in DHCP option 43. +# The meaning of the options is defined by the vendor-class so +# options are sent only when the client supplied vendor class +# matches the class given here. (A substring match is OK, so "MSFT" +# matches "MSFT" and "MSFT 5.0"). This example sets the +# mtftp address to 0.0.0.0 for PXEClients. #dhcp-option=vendor:PXEClient,1,0.0.0.0 +# Send microsoft-specific option to tell windows to release the DHCP lease +# when it shuts down. Note the "i" flag, to tell dnsmasq to send the +# value as a four-byte integer - that's what microsoft wants. See +# http://technet2.microsoft.com/WindowsServer/en/library/a70f1bb7-d2d4-49f0-96d6-4b7414ecfaae1033.mspx?mfr=true +#dhcp-option=vendor:MSFT,2,1i + # Set the boot filename for BOOTP. You will only need # this is you want to boot machines over the network and you will need # a TFTP server; either dnsmasq's built in TFTP server or an diff --git a/doc.html b/doc.html index 4d9c3c6..65b6802 100644 --- a/doc.html +++ b/doc.html @@ -15,7 +15,8 @@ Dnsmasq is a lightweight, easy to configure DNS forwarder and DHCP

Dnsmasq is targeted at home networks using NAT and connected to the internet via a modem, cable-modem or ADSL -connection but would be a good choice for any small network where low +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.

Supported platforms include Linux (with glibc and uclibc), *BSD and diff --git a/hosts b/hosts deleted file mode 100644 index c46800c..0000000 --- a/hosts +++ /dev/null @@ -1,2 +0,0 @@ -127.0.0.1 host1.domain - diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 index d5ded1f..9245cdb 100644 --- a/man/dnsmasq.8 +++ b/man/dnsmasq.8 @@ -6,7 +6,7 @@ dnsmasq \- A lightweight DHCP and caching DNS server. .I [OPTION]... .SH "DESCRIPTION" .BR dnsmasq -is a lightweight DNS and DHCP server. It is intended to provide coupled DNS and DHCP service to a +is a lightweight DNS, TFTP and DHCP server. It is intended to provide coupled DNS and DHCP service to a LAN. .PP Dnsmasq accepts DNS queries and either answers them from a small, local, @@ -18,10 +18,12 @@ DNS queries for DHCP configured hosts. The dnsmasq DHCP server supports static address assignments, multiple networks, DHCP-relay and RFC3011 subnet specifiers. It automatically sends a sensible default set of DHCP options, and can be configured to -send any desired set of DHCP options. It also supports BOOTP. +send any desired set of DHCP options, inlcuding vendor-encapsulated +options. It includes a secure, read-only, +TFTP server to allow net/PXE boot of DHCP hosts and also supports BOOTP. .PP Dnsmasq -supports IPv6. +supports IPv6 for DNS, but not DHCP. .SH OPTIONS Note that in general missing parameters are allowed and switch off functions, for instance "--pid-file" disables writing a PID file. On @@ -233,7 +235,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/]][[#][@[#]]] +.B \-S, --local, --server=[/[]/[domain/]][[#][@[#]]] Specify IP address of upstream severs directly. Setting this flag does not suppress reading of /etc/resolv.conf, use -R to do that. If one or more @@ -436,7 +438,7 @@ have exactly the same effect as .B --dhcp-host options containing the same information. .TP -.B \-O, --dhcp-option=[,[,]][vendor:],[[,]] +.B \-O, --dhcp-option=[,[,]][vendor:[],],[[,]] Specify different or extra options to DHCP clients. By default, dnsmasq sends some standard options to DHCP clients, the netmask and broadcast address are set to the same as the host running dnsmasq, and @@ -478,10 +480,15 @@ a literal IP address as TFTP server name, it is necessary to do Encapsulated Vendor-class options may also be specified using --dhcp-option: for instance -.B --dhcp-option=vendor:PXEClient,1,0.0.0.0 -sends the vendor class "PXEClient" and the encapsulated vendor class-specific option "mftp-address=0.0.0.0" Only one vendor class is allowed for any -host, but multiple options are allowed, provided they all have -the same vendor class. The address 0.0.0.0 is not treated specially in +.B --dhcp-option=vendor:PXEClient,1,0.0.0.0 +sends the encapsulated vendor +class-specific option "mftp-address=0.0.0.0" to any client whose +vendor-class matches "PXEClient". The vendor-class matching is +substring based (see --dhcp-vendorclass for details) and it is +possible to omit the vendorclass completely; +.B --dhcp-option=vendor:,1,0.0.0.0 +in which case the encapsulated option is always sent. +The address 0.0.0.0 is not treated specially in encapsulated vendor class options. .TP .B \-U, --dhcp-vendorclass=, @@ -589,7 +596,7 @@ The environment is inherited from the invoker of dnsmasq, and if the host provided a client-id, this is stored in the environment variable DNSMASQ_CLIENT_ID. If the client provides vendor-class or user-class information, these are provided in DNSMASQ_VENDOR_CLASS and -DNSMASQ_USER_CLASS0..DNSMASQ_USER_CLASSn variables, but only fory +DNSMASQ_USER_CLASS0..DNSMASQ_USER_CLASSn variables, but only for "add" actions or "old" actions when a host resumes an existing lease, since these data are not held in dnsmasq's lease database. If dnsmasq was compiled with HAVE_BROKEN_RTC, then @@ -633,7 +640,15 @@ packets arrive at tap interfaces which don't have an IP address. Specifies the domain for the DHCP server. This has two effects; firstly it causes the DHCP server to return the domain to any hosts which request it, and secondly it sets the domain which it is legal -for DHCP-configured hosts to claim. The intention is to constrain hostnames so that an untrusted host on the LAN cannot advertise it's name via dhcp as e.g. "microsoft.com" and capture traffic not meant for it. If no domain suffix is specified, then any DHCP hostname with a domain part (ie with a period) will be disallowed and logged. If suffix is specified, then hostnames with a domain part are allowed, provided the domain part matches the suffix. In addition, when a suffix is set then hostnames without a domain part have the suffix added as an optional domain part. Eg on my network I can set +for DHCP-configured hosts to claim. The intention is to constrain +hostnames so that an untrusted host on the LAN cannot advertise +its name via dhcp as e.g. "microsoft.com" and capture traffic not +meant for it. If no domain suffix is specified, then any DHCP +hostname with a domain part (ie with a period) will be disallowed +and logged. If suffix is specified, then hostnames with a domain +part are allowed, provided the domain part matches the suffix. In +addition, when a suffix is set then hostnames without a domain +part have the suffix added as an optional domain part. Eg on my network I can set .B --domain=thekelleys.org.uk and have a machine whose DHCP hostname is "laptop". The IP address for that machine is available from .B dnsmasq @@ -657,7 +672,7 @@ the dnsmasq process under normal unix access-control rules is available via TFTP. When the --tftp-secure flag is given, only files owned by the user running the dnsmasq process are accessible. If dnsmasq is being run as root, different rules apply: --tftp-secure -has not effect, but only files which have the world-readable bit set +has no effect, but only files which have the world-readable bit set are accessible. It is not recommended to run dnsmasq as root with TFTP enabled, and certainly not without specifying --tftp-root. Doing so can expose any world-readable file on the server to any host on the net. @@ -823,6 +838,50 @@ parameter in a BOOTP request is matched against netids in configurations, allowing some control over the options returned to different classes of hosts. +.SH LIMITS +The default values for resource limits in dnsmasq are generally +conservative, and appropriate for embedded router type devices with +slow processors and limited memory. On more capable hardware, it is +possible to increase the limits, and handle many more clients. The +following applies to dnsmasq-2.37: earlier versions did not scale as well. + +.PP +Dnsmasq is capable of handling DNS and DHCP for at least a thousand +clients. Clearly to do this the value of +.B --dhcp-max +must be increased, +and lease times should not be very short (less than one hour). The +value of +.B --dns-forward-max +can be increased: start with it equal to +the number of clients and increase if DNS seems slow. Note that DNS +performance depends too on the performance of the upstream +nameservers. The size of the DNS cache may be increased: the hard +limit is 10000 names and the default (150) is very low. Sending +SIGUSR1 to dnsmasq makes it log information which is useful for tuning +the cache size. See the +.B NOTES +section for details. + +.PP +The built-in TFTP server is capable of many simultaneous file +transfers: the absolute limit is related to the number of file-handles +allowed to a process and the ability of the select() system call to +cope with large numbers of file handles. If the limit is set too high +using +.B --tftp-max +it will be scaled down and the actual limit logged at +start-up. Note that more transfers are possible when the same file is +being sent than when each transfer sends a different file. + +.PP +It is possible to use dnsmasq to block Web advertising by using a list +of known banner-ad servers, all resolving to 127.0.0.1 or 0.0.0.0, in +.B /etc/hosts +or an additional hosts file. The list can be very long, +dnsmasq has been tested successfully with one million names. That size +file needs a 1GHz processor and about 60Mb of RAM. + .SH FILES .IR /etc/dnsmasq.conf diff --git a/po/de.po b/po/de.po index 4617dc3..66802f2 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2005-09-27 09:37+0100\n" "Last-Translator: Simon Kelley \n" "Language-Team: German \n" @@ -15,37 +15,37 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, c-format msgid "bad address at %s line %d" msgstr "" # @Simon: Here I need an example to understand it :) -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "" # @Simon: Here I need an example to understand it :) -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "lese %s - %d Adressen" # @Simon: 'lese' is present, is that ok? If it should be past, it would be # @Simon: "gelesen: %s - %d Adressen" - note the colon, it's a must, then. -#: cache.c:796 +#: cache.c:822 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:849 +#: cache.c:875 #, c-format msgid "" "not giving name %s to the DHCP lease of %s because the name exists in %s " @@ -56,7 +56,7 @@ msgstr "" # @Simon: "Mieter" is rather 'logder, renter, tenant, lessee' but I couldn't find anything that fits better. # @Simon: So I thought I put it in ''-marks :) -#: cache.c:893 +#: cache.c:919 #, fuzzy, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " @@ -70,7 +70,7 @@ msgstr "" # @Simon: I would prefer to use "noch gültige" = "still valid", would that fit to the sense? Then it would be: # @Simon: msgstr "Cache Größe %d, %d/%d Cache-Einfügungen verwendeten noch gültige Cache-Einträge wieder." # @Simon: btw, what is the "%d/%d"-part? -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "Speicher nicht verfügbar" @@ -438,189 +438,189 @@ msgstr "" msgid "Valid options are :\n" msgstr "" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "" -#: option.c:693 +#: option.c:696 #, c-format msgid "cannot access directory %s: %s" msgstr "" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, c-format msgid "cannot access %s: %s" msgstr "" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "" -#: option.c:1685 +#: option.c:1688 msgid "bad PTR record" msgstr "" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" "\n" msgstr "" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "" -#: option.c:2025 +#: option.c:2028 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" -#: option.c:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" -#: option.c:2042 +#: option.c:2045 #, c-format msgid "bad command line options: %s" msgstr "" -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "" -#: option.c:2121 +#: option.c:2124 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "" -#: option.c:2131 +#: option.c:2134 msgid "must have exactly one resolv.conf to read domain from." msgstr "" -#: option.c:2134 +#: option.c:2137 #, c-format msgid "failed to read %s: %s" msgstr "" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "" @@ -630,7 +630,7 @@ msgstr "" msgid "nameserver %s refused to do a recursive query" msgstr "" -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "" @@ -640,7 +640,7 @@ msgstr "" msgid "failed to load %s: %m" msgstr "" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "" @@ -660,7 +660,7 @@ msgstr "" msgid "unknown interface %s in bridge-interface" msgstr "" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "" @@ -727,130 +727,134 @@ msgstr "" msgid "failed to read %s: %m" msgstr "" -#: dnsmasq.c:97 +#: dnsmasq.c:101 msgid "" "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h" msgstr "" -#: dnsmasq.c:114 +#: dnsmasq.c:118 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "" -#: dnsmasq.c:152 +#: dnsmasq.c:156 msgid "must set exactly one interface on broken systems without IP_RECVIF" msgstr "" -#: dnsmasq.c:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "" -#: dnsmasq.c:168 +#: dnsmasq.c:172 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "" -#: dnsmasq.c:199 +#: dnsmasq.c:203 #, c-format msgid "cannot create pipe: %s" msgstr "" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +msgid "warning: no upstream servers configured" +msgstr "" + +#: dnsmasq.c:389 #, c-format msgid "DHCP, static leases only on %.0s%s, lease time %s" msgstr "" -#: dnsmasq.c:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "enabled" msgstr "" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, c-format msgid "no servers found in %s, will retry" msgstr "" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "" @@ -938,104 +942,104 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "" -#: rfc2131.c:261 +#: rfc2131.c:297 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "" -#: rfc2131.c:558 +#: rfc2131.c:605 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "" -#: rfc2131.c:1322 +#: rfc2131.c:1476 #, c-format -msgid "More than one vendor class matches, using %s" +msgid "cannot send encapsulated option %d: no space left in wrapper" msgstr "" #: netlink.c:59 @@ -1090,22 +1094,22 @@ msgstr "" msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, c-format -msgid "file %s not found" -msgstr "" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, c-format +msgid "file %s not found" +msgstr "" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, c-format msgid "TFTP failed sending %s to %s" msgstr "" diff --git a/po/es.po b/po/es.po index 9360748..ccf329a 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2005-10-07 11:04+0100\n" "Last-Translator: Christopher Chatham \n" "Language-Team: Spanish \n" @@ -15,31 +15,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "no se pudo cargar nombres desde %s: %m" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, fuzzy, c-format msgid "bad address at %s line %d" msgstr "nombre erróneo en %s línea %d" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "nombre erróneo en %s línea %d" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "direcciónes %s - %d leídas" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "el caché fue liberado" -#: cache.c:849 +#: cache.c:875 #, c-format msgid "" "not giving name %s to the DHCP lease of %s because the name exists in %s " @@ -48,7 +48,7 @@ msgstr "" "no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s " "con dirección %s" -#: cache.c:893 +#: cache.c:919 #, fuzzy, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " @@ -57,7 +57,7 @@ msgstr "" "tiempo %lu, tamaño de caché %d, %d/%d inserciónes de caché reutilizaron " "objetos no vencidos." -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "no se pudo conseguir memoria" @@ -411,137 +411,137 @@ msgstr "Usar opciones cortas solo en la l msgid "Valid options are :\n" msgstr "Opciones válidas son :\n" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "dhcp-option erróneo" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "dominio erróneo en dhcp-option" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "opción dhcp-option demasiado larga" -#: option.c:693 +#: option.c:696 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "no se puede leer %s: %s" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "no se puede leer %s: %s" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "preferencia MX errónea" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "nombre MX erróneo" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "destino MX erróneo" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "no se pueden correr guiónes bajo uClinux" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "puerto erróneo" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "dhcp-range (rango DHCP) erróneo" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "solo una etiqueta netid permitida" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "rango DHCP inconsistente" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "dhcp-host erróneo" -#: option.c:1685 +#: option.c:1688 #, fuzzy msgid "bad PTR record" msgstr "expediente SRV erróneo" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "expediente TXT erróneo" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "expediente TXT demasiado largo" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "expediente SRV erróneo" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "destino SRV erróneo" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "número de puerto inválido" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "prioridad inválida" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "peso inválido" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "no se puede leer %s: %s" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "falta \"" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "opción errónea" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "parámetro extraño" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "parámetro ausente" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "error" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq versión %s %s\n" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" @@ -550,53 +550,53 @@ msgstr "" "Opciones de compilación %s\n" "\n" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Este software viene SIN NINGUNA GARANTIA.\n" -#: option.c:2025 +#: option.c:2028 #, 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:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "bajo los términos de la GNU General Public License, versión 2.\n" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "pruebe --help" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "pruebe -w" -#: option.c:2042 +#: option.c:2045 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "opciones de línea de comandos erróneas: %s." -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "no se puede obtener host-name (nombre de host): %s" -#: option.c:2121 +#: option.c:2124 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "solo un archivo resolv.conf permitido en modo no-poll." -#: option.c:2131 +#: option.c:2134 msgid "must have exactly one resolv.conf to read domain from." msgstr "debe haber exactamente un resolv.conf desde donde leer dominio." -#: option.c:2134 +#: option.c:2137 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "no se pudo leer %s: %m" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "ninguna directiva de búsqueda encontrada en %s" @@ -606,7 +606,7 @@ msgstr "ninguna directiva de b 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:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "no se pudo accesar %s: %m" @@ -616,7 +616,7 @@ msgstr "no se pudo accesar %s: %m" msgid "failed to load %s: %m" msgstr "no se pudo cargar %s: %m" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "leyendo %s" @@ -637,7 +637,7 @@ msgstr "" msgid "unknown interface %s in bridge-interface" msgstr "interface desconocida %s" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "no se pudo crear un socket escuchador: %s" @@ -704,134 +704,139 @@ msgstr "usando servidor DNS %s#%d" msgid "failed to read %s: %m" msgstr "no se pudo leer %s: %m" -#: dnsmasq.c:97 +#: dnsmasq.c:101 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:114 +#: dnsmasq.c:118 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "no se pudo encontrar lista de interfaces: %s" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "interface desconocida %s" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "ninguna interface con dirección %s" -#: dnsmasq.c:152 +#: dnsmasq.c:156 msgid "must set exactly one interface on broken systems without IP_RECVIF" msgstr "debe fijarse exactamente una interface en sistemas rotos sin IP_RECVIF" -#: dnsmasq.c:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "error DBus: %s" -#: dnsmasq.c:168 +#: dnsmasq.c:172 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h" -#: dnsmasq.c:199 +#: dnsmasq.c:203 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "no se puede leer pipe: %s" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "versión %s iniciada, tamaño de caché %d" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "versión %s iniciada, caché deshabilitado" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "opciones de compilación: %s" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "soporte DBus habilitado: conectado a bus de sistema" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "soporte DBus habilitado: conección a bus pendiente" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" "fijando opción --bind-interfaces debido a limitaciones de sistema operativo" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "advertencia: interface %s no existe actualmente" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +#, fuzzy +msgid "warning: no upstream servers configured" +msgstr "fijando servidores upstream desde DBus" + +#: dnsmasq.c:389 #, 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:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "DHCP, rango de IPs %s -- %s, tiempo de arriendo %s" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 #, fuzzy msgid "enabled" msgstr "deshabilitado" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "advertencia: configuración de capacidades ha fallado: %m" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "corriendo como root" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "ninguna directiva de búsqueda encontrada en %s" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "saliendo al haber recibido SIGTERM" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "conectado a DBus de sistema" @@ -920,106 +925,106 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "no se pudo escribir %s: %s (reintentar en %us)" -#: rfc2131.c:261 +#: rfc2131.c:297 #, 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:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "con selector de subred" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "vía" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "deshabilitado" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "dirección en uso" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "ninguna dirección configurada" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "ninguna dirección disponible" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "no queda ningún arriendo" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "red equivocada" -#: rfc2131.c:558 +#: rfc2131.c:605 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "deshabilitando dirección DHCP estática %s" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "arriendo desconocido" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "ignorado" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "no usando dirección configurada %s porque esta arriendada a %s" -#: rfc2131.c:613 +#: rfc2131.c:665 #, fuzzy, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" "no usando dirección configurada %s porque esta siendo usada por el servidor" -#: rfc2131.c:616 +#: rfc2131.c:668 #, fuzzy, c-format msgid "not using configured address %s because it was previously declined" msgstr "no usando dirección configurada %s porque esta arriendada a %s" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "dirección equivocada" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "arriendo no encontrado" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "dirección no disponible" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "arriendo estático disponible" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "dirección reservada" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "ningún unique-id (ID único)" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "no se puede enviar opción DHCP %d: no queda espacio en el paquete" -#: rfc2131.c:1322 -#, c-format -msgid "More than one vendor class matches, using %s" -msgstr "Más de una clase de vendedor coincide, usando %s" +#: rfc2131.c:1476 +#, fuzzy, c-format +msgid "cannot send encapsulated option %d: no space left in wrapper" +msgstr "no se puede enviar opción DHCP %d: no queda espacio en el paquete" #: netlink.c:59 #, fuzzy, c-format @@ -1074,26 +1079,29 @@ msgstr "no se pudo ejecutar %s: %m" msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, fuzzy, c-format -msgid "file %s not found" -msgstr "arriendo no encontrado" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, fuzzy, c-format +msgid "file %s not found" +msgstr "arriendo no encontrado" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, fuzzy, c-format msgid "TFTP failed sending %s to %s" msgstr "no se pudo leer %s: %m" +#~ msgid "More than one vendor class matches, using %s" +#~ msgstr "Más de una clase de vendedor coincide, usando %s" + #~ msgid "forwarding table overflow: check for server loops." #~ msgstr "" #~ "desbordamiento en la tabla de reenvio: revisar si hay loops de servidor." diff --git a/po/fi.po b/po/fi.po index 078e209..a1c4b60 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2005-11-28 22:05+0000\n" "Last-Translator: Simon Kelley \n" "Language-Team: Finnish \n" @@ -15,45 +15,45 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, c-format msgid "bad address at %s line %d" msgstr "" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "" -#: cache.c:849 +#: cache.c:875 #, 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:893 +#: cache.c:919 #, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " "entries." msgstr "" -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "" @@ -389,189 +389,189 @@ msgstr "" msgid "Valid options are :\n" msgstr "" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "" -#: option.c:693 +#: option.c:696 #, c-format msgid "cannot access directory %s: %s" msgstr "" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, c-format msgid "cannot access %s: %s" msgstr "" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "" -#: option.c:1685 +#: option.c:1688 msgid "bad PTR record" msgstr "" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" "\n" msgstr "" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "" -#: option.c:2025 +#: option.c:2028 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" -#: option.c:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" -#: option.c:2042 +#: option.c:2045 #, c-format msgid "bad command line options: %s" msgstr "" -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "" -#: option.c:2121 +#: option.c:2124 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "" -#: option.c:2131 +#: option.c:2134 msgid "must have exactly one resolv.conf to read domain from." msgstr "" -#: option.c:2134 +#: option.c:2137 #, c-format msgid "failed to read %s: %s" msgstr "" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "" @@ -581,7 +581,7 @@ msgstr "" msgid "nameserver %s refused to do a recursive query" msgstr "" -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "" @@ -591,7 +591,7 @@ msgstr "" msgid "failed to load %s: %m" msgstr "" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "" @@ -611,7 +611,7 @@ msgstr "" msgid "unknown interface %s in bridge-interface" msgstr "" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "" @@ -678,130 +678,134 @@ msgstr "" msgid "failed to read %s: %m" msgstr "" -#: dnsmasq.c:97 +#: dnsmasq.c:101 msgid "" "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h" msgstr "" -#: dnsmasq.c:114 +#: dnsmasq.c:118 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "" -#: dnsmasq.c:152 +#: dnsmasq.c:156 msgid "must set exactly one interface on broken systems without IP_RECVIF" msgstr "" -#: dnsmasq.c:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "" -#: dnsmasq.c:168 +#: dnsmasq.c:172 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "" -#: dnsmasq.c:199 +#: dnsmasq.c:203 #, c-format msgid "cannot create pipe: %s" msgstr "" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +msgid "warning: no upstream servers configured" +msgstr "" + +#: dnsmasq.c:389 #, c-format msgid "DHCP, static leases only on %.0s%s, lease time %s" msgstr "" -#: dnsmasq.c:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "enabled" msgstr "" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, c-format msgid "no servers found in %s, will retry" msgstr "" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "" @@ -889,104 +893,104 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "" -#: rfc2131.c:261 +#: rfc2131.c:297 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "" -#: rfc2131.c:558 +#: rfc2131.c:605 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "" -#: rfc2131.c:1322 +#: rfc2131.c:1476 #, c-format -msgid "More than one vendor class matches, using %s" +msgid "cannot send encapsulated option %d: no space left in wrapper" msgstr "" #: netlink.c:59 @@ -1041,22 +1045,22 @@ msgstr "" msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, c-format -msgid "file %s not found" -msgstr "" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, c-format +msgid "file %s not found" +msgstr "" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, c-format msgid "TFTP failed sending %s to %s" msgstr "" diff --git a/po/fr.po b/po/fr.po index 2460597..157831d 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2005-10-02 19:05+0100\n" "Last-Translator: Lionel Tricon \n" "Language-Team: French \n" @@ -16,31 +16,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "Impossible de charger les noms à partir de %s : %m" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, c-format msgid "bad address at %s line %d" msgstr "mauvaise adresse dans %s ligne %d" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "mauvais nom dans %s ligne %d" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "lecture %s - %d adresses" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "cache vidé" -#: cache.c:849 +#: cache.c:875 #, c-format msgid "" "not giving name %s to the DHCP lease of %s because the name exists in %s " @@ -49,7 +49,7 @@ msgstr "" "ne donne pas de nom %s au bail DHCP de %s parce-que le nom existe dans %s " "avec l'adresse %s" -#: cache.c:893 +#: cache.c:919 #, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " @@ -58,7 +58,7 @@ 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:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "impossible d'allouer de la mémoire" @@ -424,137 +424,137 @@ msgstr "Utilisez les options courtes uniquement sur la ligne de commande.\n" msgid "Valid options are :\n" msgstr "Les options valides sont :\n" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "mauvais dhcp-option" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "mauvais domaine dans dhcp-option" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "dhcp-option trop long" -#: option.c:693 +#: option.c:696 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "Ne peut pas lire le répertoire %s : %s" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "Ne peut pas lire %s : %s" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "Mauvaise préference MX" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "mauvais nom MX" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "mauvaise cible MX" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "ne peut exécuter de script sous uClinux" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "mauvais port" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "mauvaise plage d'adresses DHCP (dhcp-range)" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "une seule étiquette netid est autorisée" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "plage d'adresses DHCP incohérente" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "mauvais dhcp-host" -#: option.c:1685 +#: option.c:1688 #, fuzzy msgid "bad PTR record" msgstr "mauvais champ SRV" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "mauvais champ TXT" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "chaîne du champ TXT trop longue" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "mauvais champ SRV" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "mauvaise cible SRV" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "numéro de port invalide" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "priorité invalide" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "poids invalide" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "trop de niveaux de récursion pour les fichiers dans %s" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "Ne peut pas lire %s : %s" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "il manque \"" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "mauvaise option" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "paramètre en trop" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "paramètre manquant" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "erreur" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Version de Dnsmasq %s %s\n" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" @@ -563,56 +563,56 @@ msgstr "" "Options à la compilation %s\n" "\n" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Ce logiciel est fourni sans AUCUNE GARANTIE.\n" -#: option.c:2025 +#: option.c:2028 #, 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:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "" "sous les termes de la licence GPL (GNU General Public License), version 2.\n" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "essayez avec --help" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "essayez avec -w" -#: option.c:2042 +#: option.c:2045 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "mauvaises options en ligne de commande : %s." -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "ne peut pas obtenir le nom de la machine : %s" -#: option.c:2121 +#: option.c:2124 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:2131 +#: option.c:2134 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:2134 +#: option.c:2137 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "impossible de lire %s : %m" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "pas de directive de recherche trouvée dans %s" @@ -622,7 +622,7 @@ msgstr "pas de directive de recherche trouv 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:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "impossible d'accéder à %s : %m" @@ -632,7 +632,7 @@ msgstr "impossible d'acc msgid "failed to load %s: %m" msgstr "impossible de charger %s : %m" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "Lecture de %s" @@ -653,7 +653,7 @@ msgstr "" msgid "unknown interface %s in bridge-interface" msgstr "interface %s inconnue" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "impossible de créer une socket de lecture : %s" @@ -720,138 +720,143 @@ msgstr "utilise le serveur de nom %s#%d" msgid "failed to read %s: %m" msgstr "impossible de lire %s : %m" -#: dnsmasq.c:97 +#: dnsmasq.c:101 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:114 +#: dnsmasq.c:118 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus n'est pas disponible : activez HAVE_DBUS dans src/config.h" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "impossible de trouver la liste des interfaces : %s" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "interface %s inconnue" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "pas d'interface avec l'adresse %s" -#: dnsmasq.c:152 +#: dnsmasq.c:156 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:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "Erreur DBus : %s" -#: dnsmasq.c:168 +#: dnsmasq.c:172 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:199 +#: dnsmasq.c:203 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "Ne peut pas lire %s : %s" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "demarré, version %s (taille de cache %d)" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "démarrage avec le cache désactivé (version %s)" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "options à la compilation : %s" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "Support DBus autorisé : connecté au bus système" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "Support DBus autorisé : connexion au bus en attente" -#: dnsmasq.c:359 +#: dnsmasq.c:363 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:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "attention : l'interface %s n'existe pas actuellement" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" "attention : le drapeau resolv-file sera ignoré car no-resolv a été spécifié" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +#, fuzzy +msgid "warning: no upstream servers configured" +msgstr "configuration des serveurs amonts à partir de DBus" + +#: dnsmasq.c:389 #, 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:384 +#: dnsmasq.c:390 #, 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:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 #, fuzzy msgid "enabled" msgstr "désactivé" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "attention : impossible de configurer la capacité %m" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "executé en temps que root" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "aucun serveur trouvé dans %s, va réessayer" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "sortie sur réception du signal SIGTERM" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "connecté au systeme DBus" @@ -943,63 +948,63 @@ msgstr "le script lease-init a retourn msgid "failed to write %s: %s (retry in %us)" msgstr "impossible de lire %s : %s (prochain essai dans %us)" -#: rfc2131.c:261 +#: rfc2131.c:297 #, 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:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "avec sélecteur de sous-reseau" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "par l'intermédiaire de" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "désactivé" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "adresse déjà utilisée" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "pas d'adresse configurée" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "pas d'adresse disponible" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "plus aucun bail disponible" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "mauvais réseau" -#: rfc2131.c:558 +#: rfc2131.c:605 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "désactive l'adresse statique DHCP %s pour %s" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "bail inconnu" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "ignoré" -#: rfc2131.c:604 +#: rfc2131.c:655 #, 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:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" @@ -1007,47 +1012,48 @@ msgstr "" "L'adresse statique %s ne sera pas utilisée car elle est utilisée par le " "serveur ou un relai" -#: rfc2131.c:616 +#: rfc2131.c:668 #, 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:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "mauvaise adresse" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "bail non trouvé" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "adresse non disponible" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "bail statique disponible" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "adresse reservée" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "pas d'identifiant unique" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "" "Impossible d'envoyer l'option DHCP %d : pas assez d'espace dans le paquet" -#: rfc2131.c:1322 -#, c-format -msgid "More than one vendor class matches, using %s" -msgstr "Plusieurs classes de fournisseurs correspondent, %s sera utilisé" +#: rfc2131.c:1476 +#, fuzzy, c-format +msgid "cannot send encapsulated option %d: no space left in wrapper" +msgstr "" +"Impossible d'envoyer l'option DHCP %d : pas assez d'espace dans le paquet" #: netlink.c:59 #, fuzzy, c-format @@ -1102,22 +1108,25 @@ msgstr "impossible d'acc msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, fuzzy, c-format -msgid "file %s not found" -msgstr "bail non trouvé" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, fuzzy, c-format +msgid "file %s not found" +msgstr "bail non trouvé" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, fuzzy, c-format msgid "TFTP failed sending %s to %s" msgstr "impossible de lire %s : %m" + +#~ msgid "More than one vendor class matches, using %s" +#~ msgstr "Plusieurs classes de fournisseurs correspondent, %s sera utilisé" diff --git a/po/id.po b/po/id.po index 4653081..9c8c4ed 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2005-10-07 11:45+0100\n" "Last-Translator: Salman AS \n" "Language-Team: Indonesian \n" @@ -15,36 +15,36 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" # OK -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "gagal memuat nama-nama dari %s: %m" # OK -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, fuzzy, c-format msgid "bad address at %s line %d" msgstr "kesalahan nama pada %s baris %d" # OK -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "kesalahan nama pada %s baris %d" # OK -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "membaca %s - %d alamat" # OK -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "cache telah dihapus" # OK -#: cache.c:849 +#: cache.c:875 #, c-format msgid "" "not giving name %s to the DHCP lease of %s because the name exists in %s " @@ -54,7 +54,7 @@ msgstr "" "sdengan alamat %s" # OK -#: cache.c:893 +#: cache.c:919 #, fuzzy, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " @@ -63,7 +63,7 @@ msgstr "" "ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa" # OK -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "tidak bisa mendapatkan memory" @@ -475,164 +475,164 @@ msgid "Valid options are :\n" msgstr "Pilihan yang boleh adalah:\n" # OK -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "dhcp-option salah" # OK -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "domain dalam dhcp-option salah" # OK -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "dhcp-option terlalu panjang" # OK -#: option.c:693 +#: option.c:696 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "tidak bisa membaca %s: %s" # OK -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "tidak bisa membaca %s: %s" # OK -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "kesukaan MX salah" # OK -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "nama MX salah" # OK -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "target MX salah" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" # OK -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "port salah" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" # OK -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "dhcp-range salah" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" # OK -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "jangkauan DHCP tidak konsisten" # OK -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "dhcp-host salah" # OK -#: option.c:1685 +#: option.c:1688 #, fuzzy msgid "bad PTR record" msgstr "rekord SRV salah" # OK -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "rekord TXT salah" # OK -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "string rekord TXT terlalu panjang" # OK -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "rekord SRV salah" # OK -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "target SRV salah" # OK -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "nomor port tidak benar" # OK -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "prioritas tidak benar" # OK -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "weight tidak benar" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" # OK -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "tidak bisa membaca %s: %s" # OK -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "kurang \"" # OK -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "pilihan salah" # OK -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "parameter berlebihan" # OK -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "parameter kurang" # OK -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "kesalahan" # OK -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq versi %s %s\n" # OK -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" @@ -642,13 +642,13 @@ msgstr "" "\n" # OK -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Perangkat lunak ini tersedia TANPA JAMINAN SEDIKITPUN.\n" # OK -#: option.c:2025 +#: option.c:2028 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" @@ -656,49 +656,49 @@ msgstr "" "membagikannya\n" # OK -#: option.c:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "dengan aturan GNU General Public License, versi 2.\n" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" # OK -#: option.c:2042 +#: option.c:2045 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "pilihan baris perintah salah: %s." # OK -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "tidak bisa mendapatkan host-name: %s" # OK -#: option.c:2121 +#: option.c:2124 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:2131 +#: option.c:2134 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:2134 +#: option.c:2137 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "gagal membaca %s: %m" # OK -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "tidak ditemukan direktif search di %s" @@ -710,7 +710,7 @@ msgid "nameserver %s refused to do a recursive query" msgstr "nameserver %s menolak melakukan resolusi rekursif" # OK -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "gagal mengakses %s: %m" @@ -722,7 +722,7 @@ msgid "failed to load %s: %m" msgstr "gagal memuat %S: %m" # OK -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "membaca %s" @@ -747,7 +747,7 @@ msgid "unknown interface %s in bridge-interface" msgstr "antarmuka tidak dikenal %s" # OK -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "gagal membuat socket: %s " @@ -827,7 +827,7 @@ msgid "failed to read %s: %m" msgstr "gagal membaca %s: %m" # OK -#: dnsmasq.c:97 +#: dnsmasq.c:101 msgid "" "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h" msgstr "" @@ -835,149 +835,155 @@ msgstr "" "config.h" # OK -#: dnsmasq.c:114 +#: dnsmasq.c:118 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus tidak tersedia: setel HAVE_DBUS dalam src/config.h" # OK -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "gagal mendapatkan daftar antarmuka: %s" # OK -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "antarmuka tidak dikenal %s" # OK -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "tidak ada antarmuka dengan alamat %s" # OK -#: dnsmasq.c:152 +#: dnsmasq.c:156 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:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "DBus error: %s" # OK -#: dnsmasq.c:168 +#: dnsmasq.c:172 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:199 +#: dnsmasq.c:203 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "tidak bisa membaca %s: %s" # OK -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "dimulai, versi %s ukuran cache %d" # OK -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "dimulai, cache versi %s di disable" # OK -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "pilihan-pilihan saat kompilasi: %s" # OK -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem" # OK -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda" # OK -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS" # OK -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "peringatan: antarmuka %s tidak ada" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" # OK -#: dnsmasq.c:383 +#: dnsmasq.c:376 +#, fuzzy +msgid "warning: no upstream servers configured" +msgstr "menyetel server-server di atas dengan DBus" + +# OK +#: dnsmasq.c:389 #, 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:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" # OK -#: dnsmasq.c:400 +#: dnsmasq.c:406 #, fuzzy msgid "enabled" msgstr "di disable" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" # OK -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "berjalan menggunakan root" # OK -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "tidak ditemukan direktif search di %s" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "keluar karena menerima SIGTERM" # OK -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "terhubung ke sistem DBus" @@ -1082,122 +1088,121 @@ msgid "failed to write %s: %s (retry in %us)" msgstr "gagal membaca %s: %m" # OK -#: rfc2131.c:261 +#: rfc2131.c:297 #, 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:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "dengan pemilih subnet" # OK -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "lewat" # OK -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "di disable" # OK -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "alamat telah digunakan" # OK -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "tak ada alamat yang disetel" # OK -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "tak ada alamat yang tersedia" # OK -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "tak ada lease yang tersisa" # OK -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "jaringan yang salah" # OK -#: rfc2131.c:558 +#: rfc2131.c:605 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "men-disable alamat statik DHCP %s" # OK -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "lease tidak diketahui" # OK -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "diabaikan" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" # OK -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "alamat salah" # OK -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "lease tak ditemukan" # OK -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "alamat tak tersedia" # OK -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "lease statik tak tersedia" # OK -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "alamat telah dipesan" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "" -# OK -#: rfc2131.c:1322 +#: rfc2131.c:1476 #, c-format -msgid "More than one vendor class matches, using %s" -msgstr "Lebih dari satu kelas vendor yang sesuai, menggunakan %s" +msgid "cannot send encapsulated option %d: no space left in wrapper" +msgstr "" # OK #: netlink.c:59 @@ -1262,28 +1267,32 @@ msgstr "gagal mengakses %s: %m" msgid "unsupported request from %s" msgstr "" -# OK -#: tftp.c:226 -#, fuzzy, c-format -msgid "file %s not found" -msgstr "lease tak ditemukan" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +# OK +#: tftp.c:296 +#, fuzzy, c-format +msgid "file %s not found" +msgstr "lease tak ditemukan" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" # OK -#: tftp.c:374 +#: tftp.c:383 #, fuzzy, c-format msgid "TFTP failed sending %s to %s" msgstr "gagal membaca %s: %m" +# OK +#~ msgid "More than one vendor class matches, using %s" +#~ msgstr "Lebih dari satu kelas vendor yang sesuai, menggunakan %s" + # OK #~ msgid "forwarding table overflow: check for server loops." #~ msgstr "meneruskan tabel overflow: memeriksa apakah terjadi loop server." diff --git a/po/it.po b/po/it.po index 925377f..618797f 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2006-05-22 11:09+0100\n" "Last-Translator: Simon Kelley \n" "Language-Team: Italian \n" @@ -15,45 +15,45 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, c-format msgid "bad address at %s line %d" msgstr "" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "" -#: cache.c:849 +#: cache.c:875 #, 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:893 +#: cache.c:919 #, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " "entries." msgstr "" -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "" @@ -389,189 +389,189 @@ msgstr "" msgid "Valid options are :\n" msgstr "" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "" -#: option.c:693 +#: option.c:696 #, c-format msgid "cannot access directory %s: %s" msgstr "" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, c-format msgid "cannot access %s: %s" msgstr "" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "" -#: option.c:1685 +#: option.c:1688 msgid "bad PTR record" msgstr "" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" "\n" msgstr "" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "" -#: option.c:2025 +#: option.c:2028 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" -#: option.c:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" -#: option.c:2042 +#: option.c:2045 #, c-format msgid "bad command line options: %s" msgstr "" -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "" -#: option.c:2121 +#: option.c:2124 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "" -#: option.c:2131 +#: option.c:2134 msgid "must have exactly one resolv.conf to read domain from." msgstr "" -#: option.c:2134 +#: option.c:2137 #, c-format msgid "failed to read %s: %s" msgstr "" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "" @@ -581,7 +581,7 @@ msgstr "" msgid "nameserver %s refused to do a recursive query" msgstr "" -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "" @@ -591,7 +591,7 @@ msgstr "" msgid "failed to load %s: %m" msgstr "" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "" @@ -611,7 +611,7 @@ msgstr "" msgid "unknown interface %s in bridge-interface" msgstr "" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "" @@ -678,130 +678,134 @@ msgstr "" msgid "failed to read %s: %m" msgstr "" -#: dnsmasq.c:97 +#: dnsmasq.c:101 msgid "" "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h" msgstr "" -#: dnsmasq.c:114 +#: dnsmasq.c:118 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "" -#: dnsmasq.c:152 +#: dnsmasq.c:156 msgid "must set exactly one interface on broken systems without IP_RECVIF" msgstr "" -#: dnsmasq.c:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "" -#: dnsmasq.c:168 +#: dnsmasq.c:172 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "" -#: dnsmasq.c:199 +#: dnsmasq.c:203 #, c-format msgid "cannot create pipe: %s" msgstr "" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +msgid "warning: no upstream servers configured" +msgstr "" + +#: dnsmasq.c:389 #, c-format msgid "DHCP, static leases only on %.0s%s, lease time %s" msgstr "" -#: dnsmasq.c:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "enabled" msgstr "" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, c-format msgid "no servers found in %s, will retry" msgstr "" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "" @@ -889,104 +893,104 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "" -#: rfc2131.c:261 +#: rfc2131.c:297 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "" -#: rfc2131.c:558 +#: rfc2131.c:605 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "" -#: rfc2131.c:1322 +#: rfc2131.c:1476 #, c-format -msgid "More than one vendor class matches, using %s" +msgid "cannot send encapsulated option %d: no space left in wrapper" msgstr "" #: netlink.c:59 @@ -1041,22 +1045,22 @@ msgstr "" msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, c-format -msgid "file %s not found" -msgstr "" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, c-format +msgid "file %s not found" +msgstr "" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, c-format msgid "TFTP failed sending %s to %s" msgstr "" diff --git a/po/no.po b/po/no.po index 2a6a1b4..b6852ca 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2006-01-11 17:39+0000\n" "Last-Translator: Jan Erik Askildt \n" "Language-Team: Norwegian \n" @@ -17,31 +17,31 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "feilet å laste navn fra %s: %m" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, c-format msgid "bad address at %s line %d" msgstr "dårlig adresse ved %s linje %d" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "dårlig navn ved %s linje %d" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "les %s - %d adresser" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "mellomlager tømt" -#: cache.c:849 +#: cache.c:875 #, c-format msgid "" "not giving name %s to the DHCP lease of %s because the name exists in %s " @@ -50,7 +50,7 @@ msgstr "" "gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med " "adressen %s" -#: cache.c:893 +#: cache.c:919 #, fuzzy, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " @@ -59,7 +59,7 @@ msgstr "" "mellomlager størrelse %d, %d/%d mellomlager innsettinger re-bruker " "mellomlager plasser som ikke er utløpt" -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "kunne ikke få minne" @@ -400,137 +400,137 @@ msgstr "Bruk korte opsjoner kun p msgid "Valid options are :\n" msgstr "Gyldige opsjoner er :\n" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "dårlig dhcp-opsjon" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "dårlig domene i dhcp-opsjon" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "dhcp-opsjon for lang" -#: option.c:693 +#: option.c:696 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "kan ikke lese %s: %s" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "kan ikke lese %s: %s" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "dårlig MX preferanse" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "dårlig MX navn" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "dårlig MX mål" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "dårlig port" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "dårlig dhcp-område" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "ikke konsistent DHCP område" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "dårlig dhcp-vert" -#: option.c:1685 +#: option.c:1688 #, fuzzy msgid "bad PTR record" msgstr "dårlig SRV post" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "dårlig TXT post" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "TXT post streng for lang" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "dårlig SRV post" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "dårlig SRV mål" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "ugyldig portnummer" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "ugyldig prioritet" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "ugyldig vekt" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "kan ikke lese %s: %s" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "mangler \"" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "dårlig opsjon" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "overflødig parameter" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "mangler parameter" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "feil" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq versjon %s %s\n" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" @@ -539,53 +539,53 @@ msgstr "" "Kompileringsopsjoner %s\n" "\n" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Denne programvaren kommer med ABSOLUTT INGEN GARANTI.\n" -#: option.c:2025 +#: option.c:2028 #, 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:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "under vilkårene gitt i GNU General Public License, versjon 2.\n" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" -#: option.c:2042 +#: option.c:2045 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "dårlige kommandlinje opsjoner: %s." -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "klarer ikke å få vertsnavn: %s" -#: option.c:2121 +#: option.c:2124 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "kun en resolv.conf fil tillat i no-poll modus." -#: option.c:2131 +#: option.c:2134 msgid "must have exactly one resolv.conf to read domain from." msgstr "må ha nøyaktig en resolv.conf å lese domene fra." -#: option.c:2134 +#: option.c:2137 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "feilet å lese %s: %m" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "intet søke direktiv funnet i %s" @@ -595,7 +595,7 @@ msgstr "intet s msgid "nameserver %s refused to do a recursive query" msgstr "navnetjener %s nektet å gjøre et rekursivt oppslag" -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "feilet å få tilgang til %s: %m" @@ -605,7 +605,7 @@ msgstr "feilet msgid "failed to load %s: %m" msgstr "feilet å laste %s: %m" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "leser %s" @@ -625,7 +625,7 @@ msgstr "Ignorerer DHCP leie for %s siden den har en ulovlig domene del" msgid "unknown interface %s in bridge-interface" msgstr "ukjent tilknytning (interface) %s" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "feilet å lage lytte socket: %s" @@ -692,133 +692,138 @@ msgstr "benytter navnetjener %s#%d" msgid "failed to read %s: %m" msgstr "feilet å lese %s: %m" -#: dnsmasq.c:97 +#: dnsmasq.c:101 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:114 +#: dnsmasq.c:118 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "feilet å finne liste av tilknytninger (interfaces): %s" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "ukjent tilknytning (interface) %s" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "ingen tilknytning (interface) med adresse %s" -#: dnsmasq.c:152 +#: dnsmasq.c:156 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:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "DBus feil: %s" -#: dnsmasq.c:168 +#: dnsmasq.c:172 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h" -#: dnsmasq.c:199 +#: dnsmasq.c:203 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "kan ikke lese %s: %s" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "startet, versjon %s mellomlager størrelse %d" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "startet, versjon %s mellomlager deaktivert" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "kompilerings opsjoner: %s" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "DBus støtte aktivert: koblet til system buss" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "DBus støtte aktivert: avventer buss tilkobling" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "setter --bind-interfaces opsjon på grunn av OS begrensninger" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +#, fuzzy +msgid "warning: no upstream servers configured" +msgstr "setter oppstrøms tjener fra DBus" + +#: dnsmasq.c:389 #, 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:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "DHCP, IP område %s -- %s, leie tid %s" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 #, fuzzy msgid "enabled" msgstr "deaktivert" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "kjører som rot (root)" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "intet søke direktiv funnet i %s" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "avslutter etter mottak av SIGTERM" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "tilkoblet til system DBus" @@ -906,105 +911,105 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "feilet å lese %s: %m" -#: rfc2131.c:261 +#: rfc2131.c:297 #, 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:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "med subnet velger" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "via" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "deaktivert" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "adresse i bruk" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "ingen adresse konfigurert" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "ingen adresse tilgjengelig" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "ingen leier igjen" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "galt nettverk" -#: rfc2131.c:558 +#: rfc2131.c:605 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "deaktiverer DHCP statisk adresse %s" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "ukjent leie" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "oversett" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "gal adresse" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "leie ikke funnet" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "adresse ikke tilgjengelig" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "statisk leie tilgjengelig" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "adresse reservert" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken" -#: rfc2131.c:1322 -#, c-format -msgid "More than one vendor class matches, using %s" -msgstr "Mer enn en produsent klasse som passer, bruker %s" +#: rfc2131.c:1476 +#, fuzzy, c-format +msgid "cannot send encapsulated option %d: no space left in wrapper" +msgstr "kan ikke sende DHCP opsjon %d: ikke mer plass i pakken" #: netlink.c:59 #, fuzzy, c-format @@ -1058,26 +1063,29 @@ msgstr "feilet msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, fuzzy, c-format -msgid "file %s not found" -msgstr "leie ikke funnet" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, fuzzy, c-format +msgid "file %s not found" +msgstr "leie ikke funnet" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, fuzzy, c-format msgid "TFTP failed sending %s to %s" msgstr "feilet å lese %s: %m" +#~ msgid "More than one vendor class matches, using %s" +#~ msgstr "Mer enn en produsent klasse som passer, bruker %s" + #~ msgid "forwarding table overflow: check for server loops." #~ msgstr "" #~ "fremsendelse (forwarding) tabell overflyt: sjekk etter tjener løkker." diff --git a/po/pl.po b/po/pl.po index 0fca34b..a9750d5 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2005-10-04 19:17+0100\n" "Last-Translator: Tomasz Sochañski \n" "Language-Team: Polish \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:697 #, c-format msgid "failed to load names from %s: %m" msgstr "b³±d ³adowania nazw z %s: %m" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, fuzzy, c-format msgid "bad address at %s line %d" msgstr "b³êdna nazwa w %s, linia %d" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "b³êdna nazwa w %s, linia %d" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "przeczytano %s - %d adresów" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "wyczyszczono cache" -#: cache.c:849 +#: cache.c:875 #, c-format msgid "" "not giving name %s to the DHCP lease of %s because the name exists in %s " @@ -49,7 +49,7 @@ msgstr "" "nazwa %s nie zosta³a nadana dzier¿awie DHCP %s, poniewa¿ nazwa istnieje w %s " "i ma adres %s" -#: cache.c:893 +#: cache.c:919 #, fuzzy, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " @@ -57,7 +57,7 @@ msgid "" msgstr "" "wielko¶æ cache %d, %d/%d wpisów cache u¿yto ponownie z niewygas³ych wpisów" -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "nie mo¿na pobraæ pamiêci" @@ -409,137 +409,137 @@ msgstr "Tylko kr msgid "Valid options are :\n" msgstr "Obs³ugiwane opcje:\n" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "b³±d w dhcp-option" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "nieprawid³owa nazwa domeny w dhcp-option" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "zbyt d³uga nazwa w dhcp-option" -#: option.c:693 +#: option.c:696 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "b³±d odczytu z %s: %s" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "b³±d odczytu z %s: %s" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "b³êdna nazwa MX" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "b³êdny cel MX" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "nieprawid³owy port" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "nieprawid³owy zakres dhcp-range" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "niespójny zakres DHCP" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "b³±d w dhcp-host" -#: option.c:1685 +#: option.c:1688 #, fuzzy msgid "bad PTR record" msgstr "b³±d w rekordzie SRV" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "nieprawid³owy rekord TX" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "zbyt d³ugi rekord TXT" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "b³±d w rekordzie SRV" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "nieprawid³owy cel SRV" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "nieprawid³owy port" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "nieprawid³owy priorytet" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "nieprawid³owe znaczenie" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "b³±d odczytu z %s: %s" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "brakuje \"" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "nieprawid³owa opcja" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "dodatkowy parametr" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "brak parametru" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "b³±d" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "Dnsmasq, wersja %s %s\n" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" @@ -548,53 +548,53 @@ msgstr "" "Wkompilowane opcje %s\n" "\n" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Oprogramowanie to nie zawiera ¿adnych gwarancji.\n" -#: option.c:2025 +#: option.c:2028 #, 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:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "na warunkach okre¶lonych w GNU General Public Licence, wersja 2.\n" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" -#: option.c:2042 +#: option.c:2045 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "nieprawid³owa opcja linii komend: %s." -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "nie mo¿na pobraæ nazwy hosta: %s" -#: option.c:2121 +#: option.c:2124 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:2131 +#: option.c:2134 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:2134 +#: option.c:2137 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "b³±d w odczycie %s: %m" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "brak wytycznych wyszukiwania w %s" @@ -604,7 +604,7 @@ msgstr "brak wytycznych wyszukiwania w %s" msgid "nameserver %s refused to do a recursive query" msgstr "serwer nazw %s odmawia wykonania zapytania rekursywnego" -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "b³±d w dostêpie do %s: %m" @@ -614,7 +614,7 @@ msgstr "b msgid "failed to load %s: %m" msgstr "b³±d ³adowania %s: %m" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "czytanie %s" @@ -636,7 +636,7 @@ msgstr "" msgid "unknown interface %s in bridge-interface" msgstr "nieznany interfejs %s" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "b³±d podczas tworzenia gniazda: %s" @@ -703,134 +703,139 @@ msgstr "u msgid "failed to read %s: %m" msgstr "b³±d w odczycie %s: %m" -#: dnsmasq.c:97 +#: dnsmasq.c:101 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:114 +#: dnsmasq.c:118 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus jest niedostêpny: ustaw HAVE_DBUS w src/config.h" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "b³±d w znalezieniu listy interfejsów sieciowych: %s" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "nieznany interfejs %s" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "brak interfejsu z adresem %s" -#: dnsmasq.c:152 +#: dnsmasq.c:156 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:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "b³±d DBus: %s" -#: dnsmasq.c:168 +#: dnsmasq.c:172 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:199 +#: dnsmasq.c:203 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "b³±d odczytu z %s: %s" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "uruchomiony, wersja %s wielko¶æ cache %d" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "uruchomiony, wersja %s cache wy³±czony" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "opcje kompilacji: %s" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "obs³uga DBus w³±czona: pod³±czono do szyny systemowej" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "obs³uga DBus w³±czona: pod³±czanie do szyny systemowej w toku" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "ustawiam opcjê --bind-interfaces z powodu limitów systemu operacyjnego" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "ostrze¿enie: interfejs %s obecnie nie istnieje" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +#, fuzzy +msgid "warning: no upstream servers configured" +msgstr "brak skonfigurowanego adresu" + +#: dnsmasq.c:389 #, 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:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "DHCP, zakres IP %s -- %s, czas dzier¿awy %s" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 #, fuzzy msgid "enabled" msgstr "wy³±czony(a)" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "pracuje z uprawnieniami u¿ytkownika root" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "brak wytycznych wyszukiwania w %s" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "wy³±czenie po otrzymaniu sygnalu SIGTERM" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "po³±czono do systemowego DBus" @@ -919,105 +924,105 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "b³±d w odczycie %s: %m" -#: rfc2131.c:261 +#: rfc2131.c:297 #, 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:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "z selekcj± podsieci" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "przez" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "wy³±czony(a)" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "adres w u¿yciu" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "brak skonfigurowanego adresu" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "brak dostêpnego adresu" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "brak wolnych dzier¿aw" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "nieprawid³owa sieæ" -#: rfc2131.c:558 +#: rfc2131.c:605 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "wy³±czanie statycznego adresu DHCP %s" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "nieznana dzier¿awa" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "ignorujê" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "b³êdny adres" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "dzier¿awa nie znaleziona" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "adres niedostêpny" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "dostêpna statyczna dzier¿awa" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "adres zarezerwowany" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "" -#: rfc2131.c:1322 +#: rfc2131.c:1476 #, c-format -msgid "More than one vendor class matches, using %s" -msgstr "Wiêcej ni¿ jeden dystrybutor pasuj±cy, u¿ywam %s" +msgid "cannot send encapsulated option %d: no space left in wrapper" +msgstr "" #: netlink.c:59 #, fuzzy, c-format @@ -1071,26 +1076,29 @@ msgstr "b msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, fuzzy, c-format -msgid "file %s not found" -msgstr "dzier¿awa nie znaleziona" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, fuzzy, c-format +msgid "file %s not found" +msgstr "dzier¿awa nie znaleziona" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, fuzzy, c-format msgid "TFTP failed sending %s to %s" msgstr "b³±d w odczycie %s: %m" +#~ msgid "More than one vendor class matches, using %s" +#~ msgstr "Wiêcej ni¿ jeden dystrybutor pasuj±cy, u¿ywam %s" + #~ msgid "forwarding table overflow: check for server loops." #~ msgstr "" #~ "przekroczenie zakresu tablicy przekazywania: sprawd¼ zapêtlenie serwera." diff --git a/po/pt_BR.po b/po/pt_BR.po index 79b0bfb..cea7cd7 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2006-01-16 20:42+0000\n" "Last-Translator: Simon Kelley \n" "Language-Team: Portuguese \n" @@ -15,45 +15,45 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: cache.c:671 +#: cache.c:697 #, c-format msgid "failed to load names from %s: %m" msgstr "" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, c-format msgid "bad address at %s line %d" msgstr "" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "" -#: cache.c:849 +#: cache.c:875 #, 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:893 +#: cache.c:919 #, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " "entries." msgstr "" -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "" @@ -389,189 +389,189 @@ msgstr "" msgid "Valid options are :\n" msgstr "" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "" -#: option.c:693 +#: option.c:696 #, c-format msgid "cannot access directory %s: %s" msgstr "" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, c-format msgid "cannot access %s: %s" msgstr "" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "" -#: option.c:1685 +#: option.c:1688 msgid "bad PTR record" msgstr "" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" "\n" msgstr "" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "" -#: option.c:2025 +#: option.c:2028 #, c-format msgid "Dnsmasq is free software, and you are welcome to redistribute it\n" msgstr "" -#: option.c:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" -#: option.c:2042 +#: option.c:2045 #, c-format msgid "bad command line options: %s" msgstr "" -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "" -#: option.c:2121 +#: option.c:2124 msgid "only one resolv.conf file allowed in no-poll mode." msgstr "" -#: option.c:2131 +#: option.c:2134 msgid "must have exactly one resolv.conf to read domain from." msgstr "" -#: option.c:2134 +#: option.c:2137 #, c-format msgid "failed to read %s: %s" msgstr "" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "" @@ -581,7 +581,7 @@ msgstr "" msgid "nameserver %s refused to do a recursive query" msgstr "" -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "" @@ -591,7 +591,7 @@ msgstr "" msgid "failed to load %s: %m" msgstr "" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "" @@ -611,7 +611,7 @@ msgstr "" msgid "unknown interface %s in bridge-interface" msgstr "" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "" @@ -678,130 +678,134 @@ msgstr "" msgid "failed to read %s: %m" msgstr "" -#: dnsmasq.c:97 +#: dnsmasq.c:101 msgid "" "ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h" msgstr "" -#: dnsmasq.c:114 +#: dnsmasq.c:118 msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "" -#: dnsmasq.c:152 +#: dnsmasq.c:156 msgid "must set exactly one interface on broken systems without IP_RECVIF" msgstr "" -#: dnsmasq.c:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "" -#: dnsmasq.c:168 +#: dnsmasq.c:172 msgid "DBus not available: set HAVE_DBUS in src/config.h" msgstr "" -#: dnsmasq.c:199 +#: dnsmasq.c:203 #, c-format msgid "cannot create pipe: %s" msgstr "" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +msgid "warning: no upstream servers configured" +msgstr "" + +#: dnsmasq.c:389 #, c-format msgid "DHCP, static leases only on %.0s%s, lease time %s" msgstr "" -#: dnsmasq.c:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "enabled" msgstr "" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, c-format msgid "no servers found in %s, will retry" msgstr "" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "" @@ -889,104 +893,104 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "" -#: rfc2131.c:261 +#: rfc2131.c:297 #, c-format msgid "no address range available for DHCP request %s %s" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "" -#: rfc2131.c:558 +#: rfc2131.c:605 #, c-format msgid "disabling DHCP static address %s for %s" msgstr "" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "" -#: rfc2131.c:1322 +#: rfc2131.c:1476 #, c-format -msgid "More than one vendor class matches, using %s" +msgid "cannot send encapsulated option %d: no space left in wrapper" msgstr "" #: netlink.c:59 @@ -1041,22 +1045,22 @@ msgstr "" msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, c-format -msgid "file %s not found" -msgstr "" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, c-format +msgid "file %s not found" +msgstr "" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, c-format msgid "TFTP failed sending %s to %s" msgstr "" diff --git a/po/ro.po b/po/ro.po index 5c49c88..40aba5a 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-01-21 15:53+0000\n" +"POT-Creation-Date: 2007-02-05 14:27+0000\n" "PO-Revision-Date: 2005-11-22 16:46+0000\n" "Last-Translator: Simon Kelley \n" "Language-Team: Romanian \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:697 #, c-format msgid "failed to load names from %s: %m" msgstr "încărcarea numelor din %s: %m a eÅŸuat" -#: cache.c:705 dhcp.c:715 +#: cache.c:731 dhcp.c:715 #, c-format msgid "bad address at %s line %d" msgstr "adresă greÅŸită în %s, linia %d" -#: cache.c:751 dhcp.c:729 +#: cache.c:777 dhcp.c:729 #, c-format msgid "bad name at %s line %d" msgstr "nume greÅŸit în %s linia %d" -#: cache.c:758 dhcp.c:783 +#: cache.c:784 dhcp.c:783 #, c-format msgid "read %s - %d addresses" msgstr "citesc %s - %d adrese" -#: cache.c:796 +#: cache.c:822 msgid "cleared cache" msgstr "memoria temporară a fost ÅŸtearsă" -#: cache.c:849 +#: cache.c:875 #, c-format msgid "" "not giving name %s to the DHCP lease of %s because the name exists in %s " @@ -48,7 +48,7 @@ msgstr "" "nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece " "numeleexistă în %s cu adresa %s" -#: cache.c:893 +#: cache.c:919 #, fuzzy, c-format msgid "" "time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache " @@ -57,7 +57,7 @@ msgstr "" "cantitate de memorie temporară %d, %d/%d stocări temporare aureutilizat " "locaÅ£ii neexpirate." -#: util.c:154 option.c:579 +#: util.c:154 option.c:582 msgid "could not get memory" msgstr "nu am putut aloca memorie" @@ -400,137 +400,137 @@ msgstr "FolosiÅ£i opÅ£iunile prescurtate doar în linie de comandă.\n" msgid "Valid options are :\n" msgstr "OpÅ£iunile valide sunt:\n" -#: option.c:428 +#: option.c:431 msgid "bad dhcp-option" msgstr "dhcp-option invalid" -#: option.c:574 +#: option.c:577 msgid "bad domain in dhcp-option" msgstr "domeniu DNS invalid în declaraÅ£ia dhcp-option" -#: option.c:631 +#: option.c:634 msgid "dhcp-option too long" msgstr "declararea dhcp-option este prea lungă" -#: option.c:693 +#: option.c:696 #, fuzzy, c-format msgid "cannot access directory %s: %s" msgstr "nu pot citi %s: %s" -#: option.c:712 tftp.c:230 +#: option.c:715 tftp.c:300 #, fuzzy, c-format msgid "cannot access %s: %s" msgstr "nu pot citi %s: %s" -#: option.c:789 +#: option.c:792 msgid "bad MX preference" msgstr "preferinţă MX invalidă" -#: option.c:798 +#: option.c:801 msgid "bad MX name" msgstr "nume MX invalid" -#: option.c:816 +#: option.c:819 msgid "bad MX target" msgstr "Å£intă MX invalidă" -#: option.c:828 +#: option.c:831 msgid "cannot run scripts under uClinux" msgstr "" -#: option.c:1027 option.c:1038 +#: option.c:1030 option.c:1041 msgid "bad port" msgstr "port invalid" -#: option.c:1182 +#: option.c:1185 msgid "bad bridge-interface" msgstr "" -#: option.c:1226 +#: option.c:1229 msgid "bad dhcp-range" msgstr "dhcp-range invalid" -#: option.c:1255 +#: option.c:1258 msgid "only one netid tag allowed" msgstr "" -#: option.c:1300 +#: option.c:1303 msgid "inconsistent DHCP range" msgstr "domeniu DHCP inconsistent" -#: option.c:1485 +#: option.c:1488 msgid "bad dhcp-host" msgstr "dhcp-host invalid" -#: option.c:1685 +#: option.c:1688 #, fuzzy msgid "bad PTR record" msgstr "înregistrare SRV invalidă" -#: option.c:1710 +#: option.c:1713 msgid "bad TXT record" msgstr "înregistrare TXT invalidă" -#: option.c:1742 +#: option.c:1745 msgid "TXT record string too long" msgstr "ÅŸirul de caractere pentru înregistrarea TXT este prea lung" -#: option.c:1781 +#: option.c:1784 msgid "bad SRV record" msgstr "înregistrare SRV invalidă" -#: option.c:1794 +#: option.c:1797 msgid "bad SRV target" msgstr "Å£intă SRV invalidă" -#: option.c:1806 +#: option.c:1809 msgid "invalid port number" msgstr "număr de port invalid" -#: option.c:1817 +#: option.c:1820 msgid "invalid priority" msgstr "prioritate invalidă" -#: option.c:1828 +#: option.c:1831 msgid "invalid weight" msgstr "pondere invalidă" -#: option.c:1859 +#: option.c:1862 #, c-format msgid "files nested too deep in %s" msgstr "" -#: option.c:1866 tftp.c:235 tftp.c:366 +#: option.c:1869 tftp.c:450 #, c-format msgid "cannot read %s: %s" msgstr "nu pot citi %s: %s" -#: option.c:1909 +#: option.c:1912 msgid "missing \"" msgstr "lipseÅŸte \"" -#: option.c:1948 +#: option.c:1951 msgid "bad option" msgstr "opÅ£iune invalidă" -#: option.c:1950 +#: option.c:1953 msgid "extraneous parameter" msgstr "parametru nerecunoscut" -#: option.c:1952 +#: option.c:1955 msgid "missing parameter" msgstr "parametru lipsa" -#: option.c:1954 +#: option.c:1957 msgid "error" msgstr "eroare" -#: option.c:2022 +#: option.c:2025 #, c-format msgid "Dnsmasq version %s %s\n" msgstr "dnsmasq versiunea %s %s\n" -#: option.c:2023 +#: option.c:2026 #, c-format msgid "" "Compile time options %s\n" @@ -539,54 +539,54 @@ msgstr "" "OpÅ£iuni cu care a fost compilat %s\n" "\n" -#: option.c:2024 +#: option.c:2027 #, c-format msgid "This software comes with ABSOLUTELY NO WARRANTY.\n" msgstr "Acest program vine FÄ‚RÄ‚ NICI O GARANÅ¢IE.\n" -#: option.c:2025 +#: option.c:2028 #, 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:2026 +#: option.c:2029 #, c-format msgid "under the terms of the GNU General Public License, version 2.\n" msgstr "în termenii LicenÅ£ei publice generale GNU, versiunea 2.\n" -#: option.c:2037 +#: option.c:2040 msgid "try --help" msgstr "" -#: option.c:2039 +#: option.c:2042 msgid "try -w" msgstr "" -#: option.c:2042 +#: option.c:2045 #, fuzzy, c-format msgid "bad command line options: %s" msgstr "opÅ£iuni în linie de comandă invalide: %s." -#: option.c:2093 +#: option.c:2096 #, c-format msgid "cannot get host-name: %s" msgstr "nu pot citi numele maÅŸinii: %s" -#: option.c:2121 +#: option.c:2124 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:2131 +#: option.c:2134 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:2134 +#: option.c:2137 #, fuzzy, c-format msgid "failed to read %s: %s" msgstr "nu pot citi %s: %n" -#: option.c:2152 +#: option.c:2155 #, c-format msgid "no search directive found in %s" msgstr "nu s-a găsit nici un criteriu de căutare în %s" @@ -596,7 +596,7 @@ msgstr "nu s-a găsit nici un criteriu de căutare în %s" msgid "nameserver %s refused to do a recursive query" msgstr "serverul DNS %s refuză interogările recursive" -#: isc.c:73 dnsmasq.c:527 +#: isc.c:73 dnsmasq.c:533 #, c-format msgid "failed to access %s: %m" msgstr "accesarea serverului %s a eÅŸuat: %n" @@ -606,7 +606,7 @@ msgstr "accesarea serverului %s a eÅŸuat: %n" msgid "failed to load %s: %m" msgstr "nu pot încărca %s: %n" -#: isc.c:93 dnsmasq.c:549 +#: isc.c:93 dnsmasq.c:555 #, c-format msgid "reading %s" msgstr "citesc %s" @@ -626,7 +626,7 @@ msgstr "ÃŽmprumutul DHCP pentru %s va fi ignorat deoarece are domeniu invalid" msgid "unknown interface %s in bridge-interface" msgstr "interfaţă necunoscută %s" -#: network.c:379 dnsmasq.c:137 +#: network.c:379 dnsmasq.c:141 #, c-format msgid "failed to create listening socket: %s" msgstr "creearea socket-ului de ascultare a eÅŸuat: %s" @@ -693,136 +693,141 @@ msgstr "folosim serverul DNS %s#%d" msgid "failed to read %s: %m" msgstr "nu pot citi %s: %n" -#: dnsmasq.c:97 +#: dnsmasq.c:101 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:114 +#: dnsmasq.c:118 #, fuzzy msgid "TFTP server not available: set HAVE_TFTP in src/config.h" msgstr "DBus nu este disponibil: puneÅ£i HAVE_DBUS in src/config.h" -#: dnsmasq.c:119 +#: dnsmasq.c:123 #, c-format msgid "failed to find list of interfaces: %s" msgstr "enumerarea interfeÅ£elor a eÅŸuat: %s" -#: dnsmasq.c:127 +#: dnsmasq.c:131 #, c-format msgid "unknown interface %s" msgstr "interfaţă necunoscută %s" -#: dnsmasq.c:133 +#: dnsmasq.c:137 #, c-format msgid "no interface with address %s" msgstr "nu exista interfaţă pentru adresa %s" -#: dnsmasq.c:152 +#: dnsmasq.c:156 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:165 dnsmasq.c:654 +#: dnsmasq.c:169 dnsmasq.c:660 #, c-format msgid "DBus error: %s" msgstr "eroare DBus: %s" -#: dnsmasq.c:168 +#: dnsmasq.c:172 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:199 +#: dnsmasq.c:203 #, fuzzy, c-format msgid "cannot create pipe: %s" msgstr "nu pot citi %s: %s" -#: dnsmasq.c:342 +#: dnsmasq.c:346 #, c-format msgid "started, version %s cachesize %d" msgstr "am ponit, versiunea %s memorie temporară %d" -#: dnsmasq.c:344 +#: dnsmasq.c:348 #, c-format msgid "started, version %s cache disabled" msgstr "am pornit, versiunea %s memorie temporară dezactivată" -#: dnsmasq.c:346 +#: dnsmasq.c:350 #, c-format msgid "compile time options: %s" msgstr "compilat cu opÅ£iunile: %s" -#: dnsmasq.c:352 +#: dnsmasq.c:356 msgid "DBus support enabled: connected to system bus" msgstr "suportul DBus activ: sunt conectat la magistrala sistem" -#: dnsmasq.c:354 +#: dnsmasq.c:358 msgid "DBus support enabled: bus connection pending" msgstr "suportul DBus activ: aÅŸtept conexiunea la magistrală" -#: dnsmasq.c:359 +#: dnsmasq.c:363 msgid "setting --bind-interfaces option because of OS limitations" msgstr "specific opÅ£iunea --bind-interfaces din cauza limitărilor SO" -#: dnsmasq.c:364 +#: dnsmasq.c:368 #, c-format msgid "warning: interface %s does not currently exist" msgstr "atenÅ£ie: interfaÅ£a %s nu există momentan" -#: dnsmasq.c:369 +#: dnsmasq.c:373 msgid "warning: ignoring resolv-file flag because no-resolv is set" msgstr "" -#: dnsmasq.c:383 +#: dnsmasq.c:376 +#, fuzzy +msgid "warning: no upstream servers configured" +msgstr "configurăm serverele superioare prin Dbus" + +#: dnsmasq.c:389 #, 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:384 +#: dnsmasq.c:390 #, c-format msgid "DHCP, IP range %s -- %s, lease time %s" msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s" -#: dnsmasq.c:400 +#: dnsmasq.c:406 msgid "root is " msgstr "" -#: dnsmasq.c:400 +#: dnsmasq.c:406 #, fuzzy msgid "enabled" msgstr "dezactivat" -#: dnsmasq.c:402 +#: dnsmasq.c:408 msgid "secure mode" msgstr "" -#: dnsmasq.c:422 +#: dnsmasq.c:428 #, c-format msgid "restricting maximum simultaneous TFTP transfers to %d" msgstr "" -#: dnsmasq.c:433 +#: dnsmasq.c:439 #, c-format msgid "warning: setting capabilities failed: %m" msgstr "" -#: dnsmasq.c:435 +#: dnsmasq.c:441 msgid "running as root" msgstr "rulez ca root" -#: dnsmasq.c:560 +#: dnsmasq.c:566 #, fuzzy, c-format msgid "no servers found in %s, will retry" msgstr "nu s-a găsit nici un criteriu de căutare în %s" -#: dnsmasq.c:619 +#: dnsmasq.c:625 msgid "exiting on receipt of SIGTERM" msgstr "am primit SIGTERM, am terminat" -#: dnsmasq.c:656 +#: dnsmasq.c:662 msgid "connected to system DBus" msgstr "magistrala sistem Dbus conectată" @@ -910,105 +915,105 @@ msgstr "" msgid "failed to write %s: %s (retry in %us)" msgstr "nu pot citi %s: %n" -#: rfc2131.c:261 +#: rfc2131.c:297 #, 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:262 +#: rfc2131.c:298 msgid "with subnet selector" msgstr "cu selectorul de subreÅ£ea" -#: rfc2131.c:262 +#: rfc2131.c:298 msgid "via" msgstr "prin" -#: rfc2131.c:288 rfc2131.c:312 +#: rfc2131.c:322 rfc2131.c:347 msgid "disabled" msgstr "dezactivat" -#: rfc2131.c:324 rfc2131.c:763 +#: rfc2131.c:359 rfc2131.c:814 msgid "address in use" msgstr "adresa este folosită" -#: rfc2131.c:327 +#: rfc2131.c:362 msgid "no address configured" msgstr "adresă lipsă" -#: rfc2131.c:340 rfc2131.c:630 +#: rfc2131.c:375 rfc2131.c:682 msgid "no address available" msgstr "nici o adresă disponibilă" -#: rfc2131.c:349 rfc2131.c:773 +#: rfc2131.c:384 rfc2131.c:824 msgid "no leases left" msgstr "nu mai am de unde să împrumut" -#: rfc2131.c:352 rfc2131.c:737 +#: rfc2131.c:387 rfc2131.c:788 msgid "wrong network" msgstr "reÅ£ea greÅŸită" -#: rfc2131.c:558 +#: rfc2131.c:605 #, fuzzy, c-format msgid "disabling DHCP static address %s for %s" msgstr "dezactivăm adresele DHCP statice %s" -#: rfc2131.c:579 +#: rfc2131.c:626 msgid "unknown lease" msgstr "împrumut necunoscut" -#: rfc2131.c:588 rfc2131.c:885 +#: rfc2131.c:635 rfc2131.c:934 msgid "ignored" msgstr "ignorat" -#: rfc2131.c:604 +#: rfc2131.c:655 #, c-format msgid "not using configured address %s because it is leased to %s" msgstr "" -#: rfc2131.c:613 +#: rfc2131.c:665 #, c-format msgid "" "not using configured address %s because it is in use by the server or relay" msgstr "" -#: rfc2131.c:616 +#: rfc2131.c:668 #, c-format msgid "not using configured address %s because it was previously declined" msgstr "" -#: rfc2131.c:700 +#: rfc2131.c:751 msgid "wrong address" msgstr "adresă greÅŸită" -#: rfc2131.c:713 +#: rfc2131.c:764 msgid "lease not found" msgstr "împrumutul nu a fost găsit" -#: rfc2131.c:745 +#: rfc2131.c:796 msgid "address not available" msgstr "adresă indisponibilă" -#: rfc2131.c:756 +#: rfc2131.c:807 msgid "static lease available" msgstr "împrumut static este disponibil" -#: rfc2131.c:760 +#: rfc2131.c:811 msgid "address reserved" msgstr "adresă rezervată" -#: rfc2131.c:766 +#: rfc2131.c:817 msgid "no unique-id" msgstr "" -#: rfc2131.c:1023 +#: rfc2131.c:1181 #, c-format msgid "cannot send DHCP option %d: no space left in packet" msgstr "nu pot trimite opÅ£iunea DHCP %d: nu mai este loc în pachet" -#: rfc2131.c:1322 -#, c-format -msgid "More than one vendor class matches, using %s" -msgstr "Se potrivesc mai multe clase de mărci de interfeÅ£e, folosim %s" +#: rfc2131.c:1476 +#, fuzzy, c-format +msgid "cannot send encapsulated option %d: no space left in wrapper" +msgstr "nu pot trimite opÅ£iunea DHCP %d: nu mai este loc în pachet" #: netlink.c:59 #, fuzzy, c-format @@ -1062,26 +1067,29 @@ msgstr "accesarea serverului %s a eÅŸuat: %n" msgid "unsupported request from %s" msgstr "" -#: tftp.c:226 -#, fuzzy, c-format -msgid "file %s not found" -msgstr "împrumutul nu a fost găsit" - -#: tftp.c:293 +#: tftp.c:229 #, c-format msgid "TFTP sent %s to %s" msgstr "" -#: tftp.c:343 +#: tftp.c:296 +#, fuzzy, c-format +msgid "file %s not found" +msgstr "împrumutul nu a fost găsit" + +#: tftp.c:352 #, c-format msgid "TFTP error %d %s received from %s" msgstr "" -#: tftp.c:374 +#: tftp.c:383 #, fuzzy, c-format msgid "TFTP failed sending %s to %s" msgstr "nu pot citi %s: %n" +#~ msgid "More than one vendor class matches, using %s" +#~ msgstr "Se potrivesc mai multe clase de mărci de interfeÅ£e, folosim %s" + #~ msgid "forwarding table overflow: check for server loops." #~ msgstr "" #~ "depăşire de memorie în tabela cu înaintări DNS: verificaÅ£i de bucle." diff --git a/src/cache.c b/src/cache.c index 6533ef7..d88ac4d 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1,4 +1,4 @@ -/* 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 @@ -157,9 +157,24 @@ static struct crec **hash_bucket(char *name) static void cache_hash(struct crec *crecp) { - struct crec **bucket = hash_bucket(cache_get_name(crecp)); - crecp->hash_next = *bucket; - *bucket = crecp; + /* maintain an invariant that all entries with F_REVERSE set + are at the start of the hash-chain and all non-reverse + immortal entries are at the end of the hash-chain. + This allows reverse searches and garbage collection to be optimised */ + + struct crec **up = hash_bucket(cache_get_name(crecp)); + + if (!(crecp->flags & F_REVERSE)) + { + while (*up && ((*up)->flags & F_REVERSE)) + up = &((*up)->hash_next); + + if (crecp->flags & F_IMMORTAL) + while (*up && (!(*up)->flags & F_IMMORTAL)) + up = &((*up)->hash_next); + } + crecp->hash_next = *up; + *up = crecp; } static void cache_free(struct crec *crecp) @@ -258,13 +273,18 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign If (flags == 0) remove any expired entries in the whole cache. In the flags & F_FORWARD case, the return code is valid, and returns zero if the - name exists in the cache as a HOSTS or DHCP entry (these are never deleted) */ - - struct crec *crecp, **up; + name exists in the cache as a HOSTS or DHCP entry (these are never deleted) + We take advantage of the fact that hash chains have stuff in the order ,, + so that when we hit an entry which isn't reverse and is immortal, we're done. */ + + struct crec *crecp, **up; + if (flags & F_FORWARD) { - for (up = hash_bucket(name), crecp = *up; crecp; crecp = crecp->hash_next) + for (up = hash_bucket(name), crecp = *up; + crecp && ((crecp->flags & F_REVERSE) || !(crecp->flags & F_IMMORTAL)); + crecp = crecp->hash_next) if (is_expired(now, crecp) || is_outdated_cname_pointer(crecp)) { *up = crecp->hash_next; @@ -296,7 +316,9 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign int addrlen = INADDRSZ; #endif for (i = 0; i < hash_size; i++) - for (crecp = hash_table[i], up = &hash_table[i]; crecp; crecp = crecp->hash_next) + for (crecp = hash_table[i], up = &hash_table[i]; + crecp && ((crecp->flags & F_REVERSE) || !(crecp->flags & F_IMMORTAL)); + crecp = crecp->hash_next) if (is_expired(now, crecp)) { *up = crecp->hash_next; @@ -567,12 +589,16 @@ struct crec *cache_find_by_addr(struct crec *crecp, struct all_addr *addr, else { /* first search, look for relevant entries and push to top of list - also free anything which has expired */ + also free anything which has expired. All the reverse entries are at the + start of the hash chain, so we can give up when we find the first + non-REVERSE one. */ int i; struct crec **up, **chainp = &ans; - for(i=0; ihash_next) + for (i=0; iflags & F_REVERSE); + crecp = crecp->hash_next) if (!is_expired(now, crecp)) { if ((crecp->flags & F_REVERSE) && diff --git a/src/config.h b/src/config.h index 8140dea..3894a25 100644 --- a/src/config.h +++ b/src/config.h @@ -10,7 +10,7 @@ GNU General Public License for more details. */ -#define VERSION "2.36" +#define VERSION "2.37" #define FTABSIZ 150 /* max number of outstanding requests (default) */ #define MAX_PROCS 20 /* max no children for TCP requests */ diff --git a/src/dnsmasq.c b/src/dnsmasq.c index 774c530..f32f17c 100644 --- a/src/dnsmasq.c +++ b/src/dnsmasq.c @@ -38,7 +38,11 @@ static char *compile_opts = #ifdef NO_GETTEXT "no-" #endif -"I18N "; +"I18N " +#ifndef HAVE_TFTP +"no-" +#endif +"TFTP"; static pid_t pid; static int pipewrite; @@ -368,6 +372,8 @@ int main (int argc, char **argv) if (daemon->resolv_files && !daemon->resolv_files->is_default) syslog(LOG_WARNING, _("warning: ignoring resolv-file flag because no-resolv is set")); daemon->resolv_files = NULL; + if (!daemon->servers) + syslog(LOG_WARNING, _("warning: no upstream servers configured")); } if (daemon->dhcp) diff --git a/src/dnsmasq.h b/src/dnsmasq.h index 798a1e1..841fda2 100644 --- a/src/dnsmasq.h +++ b/src/dnsmasq.h @@ -1,4 +1,4 @@ -/* 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 @@ -10,7 +10,7 @@ GNU General Public License for more details. */ -#define COPYRIGHT "Copyright (C) 2000-2006 Simon Kelley" +#define COPYRIGHT "Copyright (C) 2000-2007 Simon Kelley" /* get these before config.h for IPv6 stuff... */ #include @@ -365,6 +365,7 @@ struct dhcp_opt { #define DHOPT_ADDR 1 #define DHOPT_STRING 2 +#define DHOPT_VENDOR_MATCH 4 struct dhcp_boot { char *file, *sname; diff --git a/src/forward.c b/src/forward.c index 85fcb4c..f5c516c 100644 --- a/src/forward.c +++ b/src/forward.c @@ -365,7 +365,7 @@ static size_t process_reply(struct daemon *daemon, HEADER *header, time_t now, PUTSHORT(daemon->edns_pktsz, psave); } - if (is_sign || header->opcode != QUERY || (header->rcode != NOERROR && header->rcode != NXDOMAIN)) + if (header->opcode != QUERY || (header->rcode != NOERROR && header->rcode != NXDOMAIN)) return n; /* Complain loudly if the upstream server is non-recursive. */ diff --git a/src/lease.c b/src/lease.c index b4f64cc..399cb76 100644 --- a/src/lease.c +++ b/src/lease.c @@ -312,7 +312,7 @@ struct dhcp_lease *lease_allocate(struct in_addr addr) memset(lease, 0, sizeof(struct dhcp_lease)); lease->new = 1; lease->addr = addr; - lease->hwaddr_len = 225; /* illegal value */ + lease->hwaddr_len = 256; /* illegal value */ lease->expires = 1; #ifdef HAVE_BROKEN_RTC lease->length = 0xffffffff; /* illegal value */ diff --git a/src/option.c b/src/option.c index 66bd31c..ef267dc 100644 --- a/src/option.c +++ b/src/option.c @@ -384,7 +384,7 @@ static char *parse_dhcp_opt(struct daemon *daemon, char *arg) { struct dhcp_opt *new = safe_malloc(sizeof(struct dhcp_opt)); char lenchar = 0, *cp; - int addrs, digs, is_addr, is_hex, is_dec; + int addrs, digs, is_addr, is_hex, is_dec, is_vend = 0; char *comma, *problem = NULL; new->len = 0; @@ -406,7 +406,10 @@ static char *parse_dhcp_opt(struct daemon *daemon, char *arg) break; if (strstr(arg, "vendor:") == arg) - new->vendor_class = (unsigned char *)safe_string_alloc(arg+7); + { + new->vendor_class = (unsigned char *)safe_string_alloc(arg+7); + is_vend = 1; + } else { new->netid = safe_malloc(sizeof (struct dhcp_netid)); @@ -640,7 +643,7 @@ static char *parse_dhcp_opt(struct daemon *daemon, char *arg) free(new->vendor_class); free(new); } - else if (new->vendor_class) + else if (is_vend) { new->next = daemon->vendor_opts; daemon->vendor_opts = new; diff --git a/src/rfc1035.c b/src/rfc1035.c index 5c0e313..b4fd15f 100644 --- a/src/rfc1035.c +++ b/src/rfc1035.c @@ -419,19 +419,24 @@ unsigned char *find_pseudoheader(HEADER *header, size_t plen, size_t *len, unsi unsigned char *ansp = (unsigned char *)(header+1); unsigned short rdlen, type, class; unsigned char *ret = NULL; - - if (is_sign && header->opcode == QUERY) + + if (is_sign) { - for (i = 0; i < ntohs(header->qdcount); i++) + *is_sign = 0; + + if (header->opcode == QUERY) { - if (!(ansp = skip_name(ansp, header, plen))) - return NULL; - - GETSHORT(type, ansp); - GETSHORT(class, ansp); - - if (class == C_IN && type == T_TKEY) - *is_sign = 1; + for (i = 0; i < ntohs(header->qdcount); i++) + { + if (!(ansp = skip_name(ansp, header, plen))) + return NULL; + + GETSHORT(type, ansp); + GETSHORT(class, ansp); + + if (class == C_IN && type == T_TKEY) + *is_sign = 1; + } } } else diff --git a/src/rfc2131.c b/src/rfc2131.c index 94f152a..8b46cce 100644 --- a/src/rfc2131.c +++ b/src/rfc2131.c @@ -1,4 +1,4 @@ -/* 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 @@ -40,6 +40,8 @@ #define OPTION_T2 59 #define OPTION_VENDOR_ID 60 #define OPTION_CLIENT_ID 61 +#define OPTION_SNAME 66 +#define OPTION_FILENAME 67 #define OPTION_USER_CLASS 77 #define OPTION_CLIENT_FQDN 81 #define OPTION_AGENT_ID 82 @@ -63,41 +65,70 @@ 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 char *option_put(unsigned char *p, unsigned char *end, int opt, int len, unsigned int val); -static unsigned char *option_end(unsigned char *p, unsigned char *end, - unsigned char *agent_id, struct dhcp_packet *start); -static unsigned char *option_put_string(unsigned char *p, unsigned char *end, - int opt, char *string, int null_term); -static void bootp_option_put(struct dhcp_packet *mess, - struct dhcp_boot *boot_opts, struct dhcp_netid *netids); +static 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); static struct in_addr option_addr(unsigned char *opt); static unsigned int option_uint(unsigned char *opt, int size); static void log_packet(struct daemon *daemon, char *type, void *addr, - struct dhcp_packet *mess, char *interface, char *string); + unsigned char *ext_mac, int mac_len, char *interface, char *string); static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize); static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize); -static unsigned char *do_req_options(struct dhcp_context *context, - unsigned char *p, unsigned char *end, - unsigned char *req_options, - struct daemon *daemon, - char *hostname, - struct dhcp_netid *netid, - struct in_addr subnet_addr, - unsigned char fqdn_flags, - int null_term); - +static size_t dhcp_packet_size(struct dhcp_packet *mess); +static void clear_packet(struct dhcp_packet *mess, unsigned char *end); +static void do_options(struct dhcp_context *context, + struct dhcp_packet *mess, + unsigned char *real_end, + unsigned char *req_options, + struct daemon *daemon, + char *hostname, + struct dhcp_netid *netid, + struct in_addr subnet_addr, + unsigned char fqdn_flags, + int null_term, + unsigned char *agent_id); +/* find a good value to use as MAC address for logging and address-allocation hashing. + This is normally just the chaddr field from the DHCP packet, + but eg Firewire will have hlen == 0 and use the client-id instead. + This could be anything, but will normally be EUI64 for Firewire. + We assume that if the first byte of the client-id equals the htype byte + then the client-id is using the usual encoding and use the rest of the + client-id: if not we can use the whole client-id. This should give + sane MAC address logs. */ +static unsigned char *extended_hwaddr(int hwtype, int hwlen, unsigned char *hwaddr, + int clid_len, unsigned char *clid, int *len_out) +{ + if (hwlen == 0 && clid && clid_len > 3) + { + if ((clid[0] == ARPHRD_EUI64 && hwtype == ARPHRD_IEEE1394) || clid[0] == hwtype) + { + *len_out = clid_len - 1 ; + return clid + 1; + } + else + { + *len_out = clid_len; + return clid; + } + } + + *len_out = hwlen; + return hwaddr; +} + size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *iface_name, - size_t sz, time_t now, int unicast_dest) + size_t sz, time_t now, int unicast_dest) { unsigned char *opt, *clid = NULL; struct dhcp_lease *ltmp, *lease = NULL; struct dhcp_vendor *vendor; + struct dhcp_opt *dopt; 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; - unsigned char *p, *end = (unsigned char *)(mess + 1); + unsigned char *end = (unsigned char *)(mess + 1); char *hostname = NULL, *offer_hostname = NULL, *client_hostname = NULL; int hostname_auth = 0, borken_opt = 0; unsigned char *req_options = NULL; @@ -110,6 +141,8 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa unsigned int mess_type = 0; unsigned char fqdn_flags = 0; unsigned char *agent_id = NULL; + unsigned char *emac = NULL; + int emac_len; subnet_addr.s_addr = 0; @@ -182,7 +215,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa clid_len = option_len(opt); clid = option_ptr(opt); } - + /* do we have a lease in store? */ lease = lease_find_by_client(mess->chaddr, mess->hlen, mess->htype, clid, clid_len); @@ -193,6 +226,9 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa clid_len = lease->clid_len; clid = lease->clid; } + + /* find mac to use for logging and hashing */ + emac = extended_hwaddr(mess->htype, mess->hlen, mess->chaddr, clid_len, clid, &emac_len); } for (mac = daemon->dhcp_macs; mac; mac = mac->next) @@ -268,7 +304,6 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa fallback = context->local; mess->op = BOOTREPLY; - p = mess->options + sizeof(u32); /* skip cookie */ config = find_config(daemon->dhcp_conf, context, clid, clid_len, mess->chaddr, mess->hlen, mess->htype, NULL); @@ -277,7 +312,6 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa { /* BOOTP request */ struct dhcp_netid id; - char save = mess->file[128]; struct in_addr *logaddr = NULL; /* must have a MAC addr for bootp */ @@ -301,8 +335,9 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa /* Match incoming filename field as a netid. */ if (mess->file[0]) { - mess->file[128] = 0; /* ensure zero term. */ - id.net = (char *)mess->file; + memcpy(daemon->dhcp_buff2, mess->file, sizeof(mess->file)); + daemon->dhcp_buff2[sizeof(mess->file) + 1] = 0; /* ensure zero term. */ + id.net = (char *)daemon->dhcp_buff2; id.next = netid; netid = &id; } @@ -366,24 +401,17 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa lease_set_hostname(lease, hostname, daemon->domain_suffix, 1); lease_set_expires(lease, 0xffffffff, now); /* infinite lease */ - p = do_req_options(context, p, end, NULL, daemon, - hostname, netid, subnet_addr, fqdn_flags, 0); - /* must do this after do_req_options since it overwrites filename field. */ - mess->siaddr = context->local; - bootp_option_put(mess, daemon->boot_config, netid); - p = option_end(p, end, NULL, mess); + clear_packet(mess, end); + do_options(context, mess, end, NULL, daemon, + hostname, netid, subnet_addr, 0, 0, NULL); } } - log_packet(daemon, NULL, logaddr, mess, iface_name, message); - mess->file[128] = save; - - if (message) - return 0; - else - return p - (unsigned char *)mess; + log_packet(daemon, NULL, logaddr, mess->chaddr, mess->hlen, iface_name, message); + + return message ? dhcp_packet_size(mess) : 0; } - + if ((opt = option_find(mess, sz, OPTION_CLIENT_FQDN, 4))) { /* http://tools.ietf.org/wg/dhc/draft-ietf-dhc-fqdn-option/draft-ietf-dhc-fqdn-option-10.txt */ @@ -505,6 +533,25 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa } } + /* mark vendor-encapsulated options which match the client-supplied vendor class */ + opt = option_find(mess, sz, OPTION_VENDOR_ID, 1); + for (dopt = daemon->vendor_opts; dopt; dopt = dopt->next) + { + int i, len = 0; + dopt->flags &= ~DHOPT_VENDOR_MATCH; + if (opt) + { + if (dopt->vendor_class) + len = strlen((char *)dopt->vendor_class); + for (i = 0; i <= (option_len(opt) - len); i++) + if (len == 0 || memcmp(dopt->vendor_class, option_ptr(opt)+i, len) == 0) + { + dopt->flags |= DHOPT_VENDOR_MATCH; + break; + } + } + } + /* if all the netids in the ignore list are present, ignore this client */ for (id_list = daemon->dhcp_ignore; id_list; id_list = id_list->next) if (match_netid(id_list->list, netid, 0)) @@ -546,7 +593,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa if (!(opt = option_find(mess, sz, OPTION_REQUESTED_IP, INADDRSZ))) return 0; - log_packet(daemon, "DECLINE", option_ptr(opt), mess, iface_name, daemon->dhcp_buff); + log_packet(daemon, "DECLINE", option_ptr(opt), emac, emac_len, iface_name, daemon->dhcp_buff); if (lease && lease->addr.s_addr == option_addr(opt).s_addr) lease_prune(lease, now); @@ -578,7 +625,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa else message = _("unknown lease"); - log_packet(daemon, "RELEASE", &mess->ciaddr, mess, iface_name, message); + log_packet(daemon, "RELEASE", &mess->ciaddr, emac, emac_len, iface_name, message); return 0; @@ -601,8 +648,13 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa char *addrs = inet_ntoa(config->addr); if ((ltmp = lease_find_by_addr(config->addr)) && ltmp != lease) - syslog(LOG_WARNING, _("not using configured address %s because it is leased to %s"), - addrs, print_mac(daemon, ltmp->hwaddr, ltmp->hwaddr_len)); + { + int len; + unsigned char *mac = extended_hwaddr(ltmp->hwaddr_type, ltmp->hwaddr_len, + ltmp->hwaddr, ltmp->clid_len, ltmp->clid, &len); + syslog(LOG_WARNING, _("not using configured address %s because it is leased to %s"), + addrs, print_mac(daemon, mac, len)); + } else { struct dhcp_context *tmp; @@ -630,11 +682,13 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa message = _("no address available"); } - log_packet(daemon, "DISCOVER", opt ? option_ptr(opt) : NULL, mess, iface_name, message); + log_packet(daemon, "DISCOVER", opt ? option_ptr(opt) : NULL, emac, emac_len, iface_name, message); if (message || !(context = narrow_context(context, mess->yiaddr))) return 0; + log_packet(daemon, "OFFER" , &mess->yiaddr, emac, emac_len, iface_name, NULL); + if (context->netid.net) { context->netid.next = netid; @@ -642,23 +696,20 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa } time = calc_time(context, config, lease, option_find(mess, sz, OPTION_LEASE_TIME, 4), now); - mess->siaddr = context->local; - bootp_option_put(mess, daemon->boot_config, netid); - p = option_put(p, end, OPTION_MESSAGE_TYPE, 1, DHCPOFFER); - p = option_put(p, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(context->local.s_addr)); - p = option_put(p, end, OPTION_LEASE_TIME, 4, time); + 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)); + option_put(mess, end, OPTION_LEASE_TIME, 4, time); /* T1 and T2 are required in DHCPOFFER by HP's wacky Jetdirect client. */ if (time != 0xffffffff) { - p = option_put(p, end, OPTION_T1, 4, (time/2)); - p = option_put(p, end, OPTION_T2, 4, (time*7)/8); + option_put(mess, end, OPTION_T1, 4, (time/2)); + option_put(mess, end, OPTION_T2, 4, (time*7)/8); } - p = do_req_options(context, p, end, req_options, daemon, - offer_hostname, netid, subnet_addr, fqdn_flags, borken_opt); - p = option_end(p, end, agent_id, mess); + do_options(context, mess, end, req_options, daemon, offer_hostname, + netid, subnet_addr, fqdn_flags, borken_opt, agent_id); - log_packet(daemon, "OFFER" , &mess->yiaddr, mess, iface_name, NULL); - return p - (unsigned char *)mess; + return dhcp_packet_size(mess); case DHCPREQUEST: if (ignore || have_config(config, CONFIG_DISABLE)) @@ -719,7 +770,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa mess->yiaddr = mess->ciaddr; } - log_packet(daemon, "REQUEST", &mess->yiaddr, mess, iface_name, NULL); + log_packet(daemon, "REQUEST", &mess->yiaddr, emac, emac_len, iface_name, NULL); if (!message) { @@ -776,14 +827,14 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa if (message) { - log_packet(daemon, "NAK", &mess->yiaddr, mess, iface_name, message); + log_packet(daemon, "NAK", &mess->yiaddr, emac, emac_len, iface_name, message); - mess->siaddr.s_addr = mess->yiaddr.s_addr = 0; - bootp_option_put(mess, NULL, NULL); - p = option_put(p, end, OPTION_MESSAGE_TYPE, 1, DHCPNAK); - p = option_put(p, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, - ntohl(context ? context->local.s_addr : fallback.s_addr)); - p = option_put_string(p, end, OPTION_MESSAGE, message, borken_opt); + mess->yiaddr.s_addr = 0; + clear_packet(mess, end); + option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPNAK); + option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, + ntohl(context ? context->local.s_addr : fallback.s_addr)); + option_put_string(mess, end, OPTION_MESSAGE, message, borken_opt); /* This fixes a problem with the DHCP spec, broadcasting a NAK to a host on a distant subnet which unicast a REQ to us won't work. */ if (!unicast_dest || mess->giaddr.s_addr != 0 || @@ -859,55 +910,52 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa lease_set_expires(lease, time, now); - log_packet(daemon, "ACK", &mess->yiaddr, mess, iface_name, hostname); + log_packet(daemon, "ACK", &mess->yiaddr, emac, emac_len, iface_name, hostname); - mess->siaddr = context->local; - bootp_option_put(mess, daemon->boot_config, netid); - p = option_put(p, end, OPTION_MESSAGE_TYPE, 1, DHCPACK); - p = option_put(p, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(context->local.s_addr)); - p = option_put(p, end, OPTION_LEASE_TIME, 4, time); + clear_packet(mess, end); + option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK); + option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(context->local.s_addr)); + option_put(mess, end, OPTION_LEASE_TIME, 4, time); if (time != 0xffffffff) { while (fuzz > (time/16)) fuzz = fuzz/2; - p = option_put(p, end, OPTION_T1, 4, (time/2) - fuzz); - p = option_put(p, end, OPTION_T2, 4, ((time/8)*7) - fuzz); + option_put(mess, end, OPTION_T1, 4, (time/2) - fuzz); + option_put(mess, end, OPTION_T2, 4, ((time/8)*7) - fuzz); } - p = do_req_options(context, p, end, req_options, daemon, - hostname, netid, subnet_addr, fqdn_flags, borken_opt); + do_options(context, mess, end, req_options, daemon, hostname, + netid, subnet_addr, fqdn_flags, borken_opt, agent_id); } - p = option_end(p, end, agent_id, mess); - return p - (unsigned char *)mess; + return dhcp_packet_size(mess); case DHCPINFORM: if (ignore || have_config(config, CONFIG_DISABLE)) message = _("ignored"); - log_packet(daemon, "INFORM", &mess->ciaddr, mess, iface_name, message); + log_packet(daemon, "INFORM", &mess->ciaddr, emac, emac_len, iface_name, message); if (message || mess->ciaddr.s_addr == 0 || !(context = narrow_context(context, mess->ciaddr))) return 0; + log_packet(daemon, "ACK", &mess->ciaddr, emac, emac_len, iface_name, hostname); + if (context->netid.net) { context->netid.next = netid; netid = &context->netid; } - mess->siaddr = context->local; - bootp_option_put(mess, daemon->boot_config, netid); - p = option_put(p, end, OPTION_MESSAGE_TYPE, 1, DHCPACK); - p = option_put(p, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(context->local.s_addr)); + clear_packet(mess, end); + option_put(mess, end, OPTION_MESSAGE_TYPE, 1, DHCPACK); + option_put(mess, end, OPTION_SERVER_IDENTIFIER, INADDRSZ, ntohl(context->local.s_addr)); if (!hostname) hostname = host_from_dns(daemon, mess->yiaddr); - p = do_req_options(context, p, end, req_options, daemon, - hostname, netid, subnet_addr, fqdn_flags, borken_opt); - p = option_end(p, end, agent_id, mess); + do_options(context, mess, end, req_options, daemon, hostname, + netid, subnet_addr, fqdn_flags, borken_opt, agent_id); - log_packet(daemon, "ACK", &mess->ciaddr, mess, iface_name, hostname); - return p - (unsigned char *)mess; + return dhcp_packet_size(mess); } return 0; @@ -942,7 +990,7 @@ static unsigned int calc_time(struct dhcp_context *context, struct dhcp_config * } static void log_packet(struct daemon *daemon, char *type, void *addr, - struct dhcp_packet *mess, char *interface, char *string) + unsigned char *ext_mac, int mac_len, char *interface, char *string) { struct in_addr a; @@ -956,129 +1004,10 @@ static void log_packet(struct daemon *daemon, char *type, void *addr, interface, addr ? inet_ntoa(a) : "", addr ? " " : "", - print_mac(daemon, mess->chaddr, mess->hlen), + print_mac(daemon, ext_mac, mac_len), string ? string : ""); } -static struct in_addr option_addr(unsigned char *opt) -{ - /* this worries about unaligned data in the option. */ - /* struct in_addr is network byte order */ - struct in_addr ret; - - memcpy(&ret, option_ptr(opt), INADDRSZ); - - return ret; -} - -static unsigned int option_uint(unsigned char *opt, int size) -{ - /* this worries about unaligned data and byte order */ - unsigned int ret = 0; - int i; - unsigned char *p = option_ptr(opt); - - for (i = 0; i < size; i++) - ret = (ret << 8) | *p++; - - return ret; -} - -static void bootp_option_put(struct dhcp_packet *mess, - struct dhcp_boot *boot_opts, struct dhcp_netid *netids) -{ - struct dhcp_boot *tmp; - - for (tmp = boot_opts; tmp; tmp = tmp->next) - if (match_netid(tmp->netid, netids, 0)) - break; - if (!tmp) - /* No match, look for one without a netid */ - for (tmp = boot_opts; tmp; tmp = tmp->next) - if (match_netid(tmp->netid, netids, 1)) - break; - - /* Do this _after_ the matching above, since in - BOOTP mode, one if the things we match is the filename. */ - - memset(mess->sname, 0, sizeof(mess->sname)); - memset(mess->file, 0, sizeof(mess->file)); - - if (tmp) - { - if (tmp->sname) - strncpy((char *)mess->sname, tmp->sname, sizeof(mess->sname)-1); - if (tmp->file) - strncpy((char *)mess->file, tmp->file, sizeof(mess->file)-1); - if (tmp->next_server.s_addr) - mess->siaddr = tmp->next_server; - } -} - -static int check_space(unsigned char *p, unsigned char *end, int len, int opt) -{ - /* always keep one octet space for the END option. */ - if (p + len + 3 >= end) - { - syslog(LOG_WARNING, _("cannot send DHCP option %d: no space left in packet"), opt); - return 0; - } - - return 1; -} - - -static unsigned char *option_put(unsigned char *p, unsigned char *end, int opt, int len, unsigned int val) -{ - int i; - - if (check_space(p, end, len, opt)) - { - *(p++) = opt; - *(p++) = len; - - for (i = 0; i < len; i++) - *(p++) = val >> (8 * (len - (i + 1))); - } - return p; -} - -static unsigned char *option_end(unsigned char *p, unsigned char *end, - unsigned char *agent_id, struct dhcp_packet *start) -{ - /* shuffle agent-id back down if we have room for it */ - if (agent_id && p < agent_id) - { - memmove(p, agent_id, end - agent_id); - p += end - agent_id; - } - - *(p++) = OPTION_END; - while ((p < end) && (p - ((unsigned char *)start) < MIN_PACKETSZ)) - *p++ = 0; - - return p; -} - -static unsigned char *option_put_string(unsigned char *p, unsigned char *end, int opt, - char *string, int null_term) -{ - size_t len = strlen(string); - - if (null_term && len != 255) - len++; - - if (check_space(p, end, len, opt)) - { - *(p++) = opt; - *(p++) = len; - memcpy(p, string, len); - p += len; - } - - return p; -} - static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt, int minsize) { while (*p != OPTION_END) @@ -1106,29 +1035,214 @@ static unsigned char *option_find1(unsigned char *p, unsigned char *end, int opt static unsigned char *option_find(struct dhcp_packet *mess, size_t size, int opt_type, int minsize) { - unsigned char *ret, *opt; + unsigned char *ret, *overload; /* skip over DHCP cookie; */ if ((ret = option_find1(&mess->options[0] + sizeof(u32), ((unsigned char *)mess) + size, opt_type, minsize))) return ret; /* look for overload option. */ - if (!(opt = option_find1(&mess->options[0] + sizeof(u32), ((unsigned char *)mess) + size, OPTION_OVERLOAD, 1))) + if (!(overload = option_find1(&mess->options[0] + sizeof(u32), ((unsigned char *)mess) + size, OPTION_OVERLOAD, 1))) return NULL; /* Can we look in filename area ? */ - if ((option_uint(opt, 1) & 1) && + if ((overload[2] & 1) && (ret = option_find1(&mess->file[0], &mess->file[128], opt_type, minsize))) return ret; /* finally try sname area */ - if ((option_uint(opt, 1) & 2) && + if ((overload[2] & 2) && (ret = option_find1(&mess->sname[0], &mess->sname[64], opt_type, minsize))) return ret; return NULL; } +static struct in_addr option_addr(unsigned char *opt) +{ + /* this worries about unaligned data in the option. */ + /* struct in_addr is network byte order */ + struct in_addr ret; + + memcpy(&ret, option_ptr(opt), INADDRSZ); + + return ret; +} + +static unsigned int option_uint(unsigned char *opt, int size) +{ + /* this worries about unaligned data and byte order */ + unsigned int ret = 0; + int i; + unsigned char *p = option_ptr(opt); + + for (i = 0; i < size; i++) + ret = (ret << 8) | *p++; + + return ret; +} + +static unsigned char *dhcp_skip_opts(unsigned char *start) +{ + while (*start != 0) + start += start[1] + 2; + return start; +} + +/* only for use when building packet: doesn't check for bad data. */ +static unsigned char *find_overload(struct dhcp_packet *mess) +{ + unsigned char *p = &mess->options[0] + sizeof(u32); + + while (*p != 0) + { + if (*p == OPTION_OVERLOAD) + return p; + p += p[1] + 2; + } + return NULL; +} + +static size_t dhcp_packet_size(struct dhcp_packet *mess) +{ + unsigned char *p = dhcp_skip_opts(&mess->options[0] + sizeof(u32)); + unsigned char *overload; + size_t ret; + + /* add END options to the regions. */ + if ((overload = find_overload(mess))) + { + if (option_uint(overload, 1) & 1) + *dhcp_skip_opts(mess->file) = OPTION_END; + if (option_uint(overload, 1) & 2) + *dhcp_skip_opts(mess->sname) = OPTION_END; + } + + *p++ = OPTION_END; + + ret = (size_t)(p - (unsigned char *)mess); + + if (ret < MIN_PACKETSZ) + ret = MIN_PACKETSZ; + + return ret; +} + +static unsigned char *free_space(struct dhcp_packet *mess, unsigned char *end, int opt, int len) +{ + unsigned char *p = dhcp_skip_opts(&mess->options[0] + sizeof(u32)); + + if (p + len + 3 >= end) + /* not enough space in options area, try and use overload, if poss */ + { + unsigned char *overload; + + if (!(overload = find_overload(mess)) && + (mess->file[0] == 0 || mess->sname[0] == 0)) + { + /* attempt to overload fname and sname areas, we've reserved space for the + overflow option previuously. */ + overload = p; + *(p++) = OPTION_OVERLOAD; + *(p++) = 1; + } + + p = NULL; + + /* using filename field ? */ + if (overload) + { + if (mess->file[0] == 0) + overload[2] |= 1; + + if (overload[2] & 1) + { + p = dhcp_skip_opts(mess->file); + if (p + len + 3 >= mess->file + sizeof(mess->file)) + p = NULL; + } + + if (!p) + { + /* try to bring sname into play (it may be already) */ + if (mess->sname[0] == 0) + overload[2] |= 2; + + if (overload[2] & 2) + { + p = dhcp_skip_opts(mess->sname); + if (p + len + 3 >= mess->sname + sizeof(mess->file)) + p = NULL; + } + } + } + + if (!p) + syslog(LOG_WARNING, _("cannot send DHCP option %d: no space left in packet"), opt); + } + + if (p) + { + *(p++) = opt; + *(p++) = len; + } + + return p; +} + +static void option_put(struct dhcp_packet *mess, unsigned char *end, int opt, int len, unsigned int val) +{ + int i; + unsigned char *p = free_space(mess, end, opt, len); + + if (p) + for (i = 0; i < len; i++) + *(p++) = val >> (8 * (len - (i + 1))); +} + +static void option_put_string(struct dhcp_packet *mess, unsigned char *end, int opt, + char *string, int null_term) +{ + unsigned char *p; + size_t len = strlen(string); + + if (null_term && len != 255) + len++; + + if ((p = free_space(mess, end, opt, len))) + memcpy(p, string, len); +} + +/* return length, note this only does the data part */ +static int do_opt(struct dhcp_opt *opt, unsigned char *p, struct in_addr local, int null_term) +{ + int len = opt->len; + + if ((opt->flags & DHOPT_STRING) && null_term && len != 255) + len++; + + if (p && len != 0) + { + if (opt->flags & DHOPT_ADDR) + { + int j; + struct in_addr *a = (struct in_addr *)opt->val; + for (j = 0; j < opt->len; j+=INADDRSZ, a++) + { + /* zero means "self" (but not in vendorclass options.) */ + if (a->s_addr == 0) + memcpy(p, &local, INADDRSZ); + else + memcpy(p, a, INADDRSZ); + p += INADDRSZ; + } + } + else + memcpy(p, opt->val, len); + } + return len; +} + static int in_list(unsigned char *list, int opt) { int i; @@ -1155,86 +1269,115 @@ static struct dhcp_opt *option_find2(struct dhcp_netid *netid, struct dhcp_opt * return netid ? option_find2(NULL, opts, opt) : NULL; } -static unsigned char *do_opt(struct dhcp_opt *opt, unsigned char *p, unsigned char *end, - struct in_addr local, int null_term) +static void clear_packet(struct dhcp_packet *mess, unsigned char *end) { - int len = opt->len; + memset(mess->sname, 0, sizeof(mess->sname)); + memset(mess->file, 0, sizeof(mess->file)); + memset(&mess->options[0] + sizeof(u32), 0, end - (&mess->options[0] + sizeof(u32))); + mess->siaddr.s_addr = 0; +} - if ((opt->flags & DHOPT_STRING) && null_term && len != 255) - len++; - - if (!check_space(p, end, len, opt->opt)) - return p; - - *(p++) = opt->opt; - *(p++) = len; - - if (len == 0) - return p; - - if (opt->flags & DHOPT_ADDR) - { - int j; - struct in_addr *a = (struct in_addr *)opt->val; - for (j = 0; j < opt->len; j+=INADDRSZ, a++) - { - /* zero means "self" (but not in vendorclass options.) */ - if (a->s_addr == 0) - memcpy(p, &local, INADDRSZ); - else - memcpy(p, a, INADDRSZ); - p += INADDRSZ; - } - } - else - { - memcpy(p, opt->val, len); - p += len; - } - - return p; -} - -static unsigned char *do_req_options(struct dhcp_context *context, - unsigned char *p, unsigned char *end, - unsigned char *req_options, - struct daemon *daemon, - char *hostname, - struct dhcp_netid *netid, - struct in_addr subnet_addr, - unsigned char fqdn_flags, - int null_term) +static void do_options(struct dhcp_context *context, + struct dhcp_packet *mess, + unsigned char *real_end, + unsigned char *req_options, + struct daemon *daemon, + char *hostname, + struct dhcp_netid *netid, + struct in_addr subnet_addr, + unsigned char fqdn_flags, + int null_term, + unsigned char *agent_id) { struct dhcp_opt *opt, *config_opts = daemon->dhcp_opts; - char *vendor_class = NULL; + struct dhcp_boot *boot; + unsigned char *p, *end = agent_id ? agent_id : real_end; + int len; + unsigned char f0 = 0, s0 = 0; + + /* decide which dhcp-boot option we're using */ + for (boot = daemon->boot_config; boot; boot = boot->next) + if (match_netid(boot->netid, netid, 0)) + break; + if (!boot) + /* No match, look for one without a netid */ + for (boot = daemon->boot_config; boot; boot = boot->next) + if (match_netid(boot->netid, netid, 1)) + break; + mess->siaddr = context->local; + + /* 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. + 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)) + option_put_string(mess, end, OPTION_SNAME, boot->sname, 1); + else + strncpy((char *)mess->sname, boot->sname, sizeof(mess->sname)-1); + } + + if (boot->file) + { + if (req_options && in_list(req_options, OPTION_FILENAME)) + option_put_string(mess, end, OPTION_FILENAME, boot->file, 1); + else + strncpy((char *)mess->file, boot->file, sizeof(mess->file)-1); + } + + if (boot->next_server.s_addr) + mess->siaddr = boot->next_server; + } + + /* 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) + { + f0 = mess->file[0]; + mess->file[0] = 1; + s0 = mess->sname[0]; + mess->sname[0] = 1; + } + + /* At this point, if mess->sname or mess->file are zeroed, they are available + for option overload, reserve space for the overload option. */ + if (mess->file[0] == 0 || mess->sname[0] == 0) + end -= 3; + /* rfc3011 says this doesn't need to be in the requested options list. */ if (subnet_addr.s_addr) - p = option_put(p, end, OPTION_SUBNET_SELECT, INADDRSZ, ntohl(subnet_addr.s_addr)); + option_put(mess, end, OPTION_SUBNET_SELECT, INADDRSZ, ntohl(subnet_addr.s_addr)); if (!option_find2(netid, config_opts, OPTION_NETMASK)) - p = option_put(p, end, OPTION_NETMASK, INADDRSZ, ntohl(context->netmask.s_addr)); + option_put(mess, end, OPTION_NETMASK, INADDRSZ, ntohl(context->netmask.s_addr)); /* May not have a "guessed" broadcast address if we got no packets via a relay from this net yet (ie just unicast renewals after a restart */ if (context->broadcast.s_addr && !option_find2(netid, config_opts, OPTION_BROADCAST)) - p = option_put(p, end, OPTION_BROADCAST, INADDRSZ, ntohl(context->broadcast.s_addr)); + option_put(mess, end, OPTION_BROADCAST, INADDRSZ, ntohl(context->broadcast.s_addr)); /* Same comments as broadcast apply, and also may not be able to get a sensible default when using subnet select. User must configure by steam in that case. */ if (context->router.s_addr && in_list(req_options, OPTION_ROUTER) && !option_find2(netid, config_opts, OPTION_ROUTER)) - p = option_put(p, end, OPTION_ROUTER, INADDRSZ, ntohl(context->router.s_addr)); + option_put(mess, end, OPTION_ROUTER, INADDRSZ, ntohl(context->router.s_addr)); if (in_list(req_options, OPTION_DNSSERVER) && !option_find2(netid, config_opts, OPTION_DNSSERVER)) - p = option_put(p, end, OPTION_DNSSERVER, INADDRSZ, ntohl(context->local.s_addr)); + option_put(mess, end, OPTION_DNSSERVER, INADDRSZ, ntohl(context->local.s_addr)); if (daemon->domain_suffix && in_list(req_options, OPTION_DOMAINNAME) && !option_find2(netid, config_opts, OPTION_DOMAINNAME)) - p = option_put_string(p, end, OPTION_DOMAINNAME, daemon->domain_suffix, null_term); + 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, and the fqdn using @@ -1242,7 +1385,7 @@ static unsigned char *do_req_options(struct dhcp_context *context, if (hostname) { if (in_list(req_options, OPTION_HOSTNAME)) - p = option_put_string(p, end, OPTION_HOSTNAME, hostname, null_term); + option_put_string(mess, end, OPTION_HOSTNAME, hostname, null_term); if (fqdn_flags != 0) { @@ -1255,10 +1398,8 @@ static unsigned char *do_req_options(struct dhcp_context *context, if (daemon->domain_suffix) len += strlen(daemon->domain_suffix) + 1; - if (p + len + 1 < end) + if ((p = free_space(mess, end, OPTION_CLIENT_FQDN, len))) { - *(p++) = OPTION_CLIENT_FQDN; - *(p++) = len; *(p++) = fqdn_flags; *(p++) = 255; *(p++) = 255; @@ -1292,6 +1433,10 @@ static unsigned char *do_req_options(struct dhcp_context *context, if (opt->opt == OPTION_HOSTNAME || opt->opt == OPTION_CLIENT_FQDN || opt->opt == OPTION_MAXMESSAGE || + opt->opt == OPTION_VENDOR_CLASS_OPT || + opt->opt == OPTION_OVERLOAD || + opt->opt == OPTION_PAD || + opt->opt == OPTION_END || !in_list(req_options, opt->opt) || opt != option_find2(netid, config_opts, opt->opt)) continue; @@ -1306,54 +1451,60 @@ static unsigned char *do_req_options(struct dhcp_context *context, opt->opt == OPTION_DNSSERVER)) continue; - /* opt->val has terminating zero */ - if (opt->opt == OPTION_VENDOR_ID) - vendor_class = (char *)opt->val; - else - p = do_opt(opt, p, end, context->local, null_term); + len = do_opt(opt, NULL, context->local, null_term); + if ((p = free_space(mess, end, opt->opt, len))) + do_opt(opt, p, context->local, null_term); } - if (in_list(req_options, OPTION_VENDOR_ID)) - { + if (in_list(req_options, OPTION_VENDOR_CLASS_OPT)) + { + int enc_len = 0; + + /* find size in advance */ for (opt = daemon->vendor_opts; opt; opt = opt->next) - if (match_netid(opt->netid, netid, 1) || match_netid(opt->netid, netid, 0)) + if (opt->flags & DHOPT_VENDOR_MATCH) { - if (vendor_class && strcmp(vendor_class, (char *)opt->vendor_class) != 0) - syslog(LOG_WARNING, _("More than one vendor class matches, using %s"), vendor_class); + if (!match_netid(opt->netid, netid, 1) && !match_netid(opt->netid, netid, 0)) + opt->flags &= ~DHOPT_VENDOR_MATCH; else - vendor_class = (char *)opt->vendor_class; + { + int new = enc_len + do_opt(opt, NULL, context->local, null_term) + 2; + if (new <= 255) + enc_len = new; + else + { + syslog(LOG_WARNING, _("cannot send encapsulated option %d: no space left in wrapper"), opt->opt); + opt->flags &= ~DHOPT_VENDOR_MATCH; + } + } } - - if (vendor_class) + + if ((p = free_space(mess, end, OPTION_VENDOR_CLASS_OPT, enc_len))) { - p = option_put_string(p, end, OPTION_VENDOR_ID, vendor_class, 0); - - if (in_list(req_options, OPTION_VENDOR_CLASS_OPT)) - { - unsigned char *plen, *oend = end; - - /* encapsulated options can only be 256 bytes, - even of the packet is larger */ - if (p + 256 < end) - oend = p + 256; - - if (p + 3 >= oend) - return p; - - *(p++) = OPTION_VENDOR_CLASS_OPT; - plen = p++; /* fill in later */ - - for (opt = daemon->vendor_opts; opt; opt = opt->next) - if ((match_netid(opt->netid, netid, 1) || match_netid(opt->netid, netid, 0)) && - strcmp(vendor_class, (char *)opt->vendor_class) == 0) - p = do_opt(opt, p, oend, context->local, null_term); - - *plen = p - plen - 1; - } + for (opt = daemon->vendor_opts; opt; opt = opt->next) + if (opt->flags & DHOPT_VENDOR_MATCH) + { + len = do_opt(opt, p + 2, context->local, null_term); + *(p++) = opt->opt; + *(p++) = len; + } } } - return p; + /* move agent_id back down to the end of the packet */ + if (agent_id) + { + p = dhcp_skip_opts(&mess->options[0] + sizeof(u32)); + memmove(p, agent_id, real_end - agent_id); + p += real_end - agent_id; + memset(p, 0, real_end - p); /* in case of overlap */ + } + + /* restore BOOTP anti-overload hack */ + if (!req_options) + { + mess->file[0] = f0; + mess->sname[0] = s0; + } } - diff --git a/src/tftp.c b/src/tftp.c index aab73da..488aaa2 100644 --- a/src/tftp.c +++ b/src/tftp.c @@ -14,8 +14,10 @@ #ifdef HAVE_TFTP +static struct tftp_file *check_tftp_fileperm(struct daemon *daemon, ssize_t *len); static void free_transfer(struct tftp_transfer *transfer); static ssize_t tftp_err(int err, char *packet, char *mess, char *file); +static ssize_t tftp_err_oops(char *packet, char *file); static ssize_t get_block(char *packet, struct tftp_transfer *transfer); static char *next(char **p, char *end); @@ -37,7 +39,6 @@ void tftp_request(struct listener *listen, struct daemon *daemon, time_t now) ssize_t len; char *packet = daemon->packet; char *filename, *mode, *p, *end, *opt; - struct stat statbuf; struct sockaddr_in addr, peer; struct msghdr msg; struct cmsghdr *cmptr; @@ -46,7 +47,6 @@ void tftp_request(struct listener *listen, struct daemon *daemon, time_t now) int is_err = 1, if_index = 0; struct iname *tmp; struct tftp_transfer *transfer, *t; - struct tftp_file *file; union { struct cmsghdr align; /* this ensures alignment */ @@ -74,55 +74,55 @@ void tftp_request(struct listener *listen, struct daemon *daemon, time_t now) if ((len = recvmsg(listen->tftpfd, &msg, 0)) < 2) return; - if (daemon->options & OPT_NOWILD) - addr = listen->iface->addr.in; - else - { - addr.sin_addr.s_addr = 0; - + if (daemon->options & OPT_NOWILD) + addr = listen->iface->addr.in; + else + { + addr.sin_addr.s_addr = 0; + #if defined(HAVE_LINUX_NETWORK) - for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr)) - if (cmptr->cmsg_level == SOL_IP && cmptr->cmsg_type == IP_PKTINFO) - { - addr.sin_addr = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_spec_dst; - if_index = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_ifindex; - } - if (!(ifr.ifr_ifindex = if_index) || - ioctl(listen->tftpfd, SIOCGIFNAME, &ifr) == -1) - return; - + for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr)) + if (cmptr->cmsg_level == SOL_IP && cmptr->cmsg_type == IP_PKTINFO) + { + addr.sin_addr = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_spec_dst; + if_index = ((struct in_pktinfo *)CMSG_DATA(cmptr))->ipi_ifindex; + } + if (!(ifr.ifr_ifindex = if_index) || + ioctl(listen->tftpfd, SIOCGIFNAME, &ifr) == -1) + return; + #elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF) - for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr)) - if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR) - addr.sin_addr = *((struct in_addr *)CMSG_DATA(cmptr)); - else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF) - if_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index; - - if (if_index == 0 || !if_indextoname(if_index, ifr.ifr_name)) - return; - + for (cmptr = CMSG_FIRSTHDR(&msg); cmptr; cmptr = CMSG_NXTHDR(&msg, cmptr)) + if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVDSTADDR) + addr.sin_addr = *((struct in_addr *)CMSG_DATA(cmptr)); + else if (cmptr->cmsg_level == IPPROTO_IP && cmptr->cmsg_type == IP_RECVIF) + if_index = ((struct sockaddr_dl *)CMSG_DATA(cmptr))->sdl_index; + + if (if_index == 0 || !if_indextoname(if_index, ifr.ifr_name)) + return; + #endif - - if (addr.sin_addr.s_addr == 0) - return; - - if (!iface_check(daemon, AF_INET, (struct all_addr *)&addr, &ifr, &if_index)) - return; - - /* allowed interfaces are the same as for DHCP */ - for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) - if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0)) - return; - - } - + + if (addr.sin_addr.s_addr == 0) + return; + + if (!iface_check(daemon, AF_INET, (struct all_addr *)&addr, &ifr, &if_index)) + return; + + /* allowed interfaces are the same as for DHCP */ + for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next) + if (tmp->name && (strcmp(tmp->name, ifr.ifr_name) == 0)) + return; + + } + /* tell kernel to use ephemeral port */ addr.sin_port = 0; addr.sin_family = AF_INET; #ifdef HAVE_SOCKADDR_SA_LEN addr.sin_len = sizeof(addr); #endif - + if (!(transfer = malloc(sizeof(struct tftp_transfer)))) return; @@ -205,81 +205,17 @@ void tftp_request(struct listener *listen, struct daemon *daemon, time_t now) /* file already open */ transfer->file = t->file; transfer->file->refcount++; - if ((len = get_block(packet, transfer)) == -1) - goto oops; - is_err = 0; } - else + else + /* check permissions and open file */ + transfer->file = check_tftp_fileperm(daemon, &len); + + if (transfer->file) { - /* check permissions and open file */ - - /* trick to ban moving out of the subtree */ - if (daemon->tftp_prefix && strstr(daemon->namebuff, "/../")) - { - errno = EACCES; - goto perm; - } - - if (stat(daemon->namebuff, &statbuf) == -1) - { - if (errno == ENOENT || errno == ENOTDIR) - len = tftp_err(ERR_FNF, packet, _("file %s not found"), daemon->namebuff); - else if (errno == EACCES) - { - perm: - len = tftp_err(ERR_PERM, packet, _("cannot access %s: %s"), daemon->namebuff); - } - else - { - oops: - len = tftp_err(ERR_NOTDEF, packet, _("cannot read %s: %s"), daemon->namebuff); - } - } - else - { - uid_t uid = geteuid(); - /* running as root, must be world-readable */ - if (uid == 0) - { - if (!(statbuf.st_mode & S_IROTH)) - { - errno = EACCES; - goto perm; - } - } - /* in secure mode, must be owned by user running dnsmasq */ - else if ((daemon->options & OPT_TFTP_SECURE) && uid != statbuf.st_uid) - { - errno = EACCES; - goto perm; - } - - if (!(file = malloc(sizeof(struct tftp_file) + strlen(daemon->namebuff) + 1))) - { - errno = ENOMEM; - goto oops; - } - - if ((file->fd = open(daemon->namebuff, O_RDONLY)) == -1) - { - free(file); - - if (errno == EACCES || errno == EISDIR) - goto perm; - else - goto oops; - } - else - { - transfer->file = file; - file->refcount = 1; - file->size = statbuf.st_size; - strcpy(file->filename, daemon->namebuff); - if ((len = get_block(packet, transfer)) == -1) - goto oops; - is_err = 0; - } - } + if ((len = get_block(packet, transfer)) == -1) + len = tftp_err_oops(packet, daemon->namebuff); + else + is_err = 0; } } @@ -295,7 +231,80 @@ void tftp_request(struct listener *listen, struct daemon *daemon, time_t now) daemon->tftp_trans = transfer; } } - + +static struct tftp_file *check_tftp_fileperm(struct daemon *daemon, ssize_t *len) +{ + char *packet = daemon->packet, *namebuff = daemon->namebuff; + struct tftp_file *file; + uid_t uid = geteuid(); + struct stat statbuf; + + /* trick to ban moving out of the subtree */ + if (daemon->tftp_prefix && strstr(namebuff, "/../")) + { + errno = EACCES; + goto perm; + } + + if (stat(namebuff, &statbuf) == -1) + { + if (errno == ENOENT || errno == ENOTDIR) + goto nofile; + else if (errno == EACCES) + goto perm; + else + goto oops; + } + + /* running as root, must be world-readable */ + if (uid == 0) + { + if (!(statbuf.st_mode & S_IROTH)) + { + errno = EACCES; + goto perm; + } + } + /* in secure mode, must be owned by user running dnsmasq */ + else if ((daemon->options & OPT_TFTP_SECURE) && uid != statbuf.st_uid) + { + errno = EACCES; + goto perm; + } + + if (!(file = malloc(sizeof(struct tftp_file) + strlen(namebuff) + 1))) + { + errno = ENOMEM; + goto oops; + } + + if ((file->fd = open(namebuff, O_RDONLY)) == -1) + { + free(file); + if (errno == EACCES || errno == EISDIR) + goto perm; + else + goto oops; + } + + file->size = statbuf.st_size; + file->refcount = 1; + strcpy(file->filename, namebuff); + return file; + +nofile: + *len = tftp_err(ERR_FNF, packet, _("file %s not found"), namebuff); + return NULL; + + perm: + *len = tftp_err(ERR_PERM, packet, _("cannot access %s: %s"), namebuff); + return NULL; + +oops: + *len = tftp_err_oops(packet, namebuff); + return NULL; +} + void check_tftp_listeners(struct daemon *daemon, fd_set *rset, time_t now) { struct tftp_transfer *transfer, *tmp, **up; @@ -363,7 +372,7 @@ void check_tftp_listeners(struct daemon *daemon, fd_set *rset, time_t now) if ((len = get_block(daemon->packet, transfer)) == -1) { - len = tftp_err(ERR_NOTDEF, daemon->packet, _("cannot read %s: %s"), transfer->file->filename); + len = tftp_err_oops(daemon->packet, transfer->file->filename); endcon = 1; } else if (++transfer->backoff > 5) @@ -436,6 +445,11 @@ static ssize_t tftp_err(int err, char *packet, char *message, char *file) return ret; } +static ssize_t tftp_err_oops(char *packet, char *file) +{ + return tftp_err(ERR_NOTDEF, packet, _("cannot read %s: %s"), file); +} + /* return -1 for error, zero for done. */ static ssize_t get_block(char *packet, struct tftp_transfer *transfer) {