Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
D
Dnsmasq
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nanahira
Dnsmasq
Commits
5e9e0efb
Commit
5e9e0efb
authored
Apr 17, 2006
by
Simon Kelley
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
import of dnsmasq-2.28.tar.gz
parent
cdeda28f
Changes
31
Show whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
3173 additions
and
2694 deletions
+3173
-2694
CHANGELOG
CHANGELOG
+91
-0
FAQ
FAQ
+6
-0
bld/Makefile
bld/Makefile
+1
-4
dnsmasq-rh.spec
dnsmasq-rh.spec
+1
-1
dnsmasq-suse.spec
dnsmasq-suse.spec
+1
-1
man/dnsmasq.8
man/dnsmasq.8
+7
-0
po/de.po
po/de.po
+163
-144
po/es.po
po/es.po
+179
-150
po/fi.po
po/fi.po
+162
-143
po/fr.po
po/fr.po
+179
-150
po/id.po
po/id.po
+186
-156
po/no.po
po/no.po
+182
-149
po/pl.po
po/pl.po
+179
-150
po/pt_BR.po
po/pt_BR.po
+162
-143
po/ro.po
po/ro.po
+179
-150
rpm/dnsmasq-SuSE.patch
rpm/dnsmasq-SuSE.patch
+1
-10
src/bpf.c
src/bpf.c
+238
-0
src/cache.c
src/cache.c
+15
-11
src/config.h
src/config.h
+31
-102
src/dbus.c
src/dbus.c
+9
-8
src/dhcp.c
src/dhcp.c
+185
-285
src/dnsmasq.c
src/dnsmasq.c
+256
-247
src/dnsmasq.h
src/dnsmasq.h
+54
-54
src/forward.c
src/forward.c
+14
-39
src/isc.c
src/isc.c
+2
-0
src/lease.c
src/lease.c
+81
-71
src/netlink.c
src/netlink.c
+172
-116
src/network.c
src/network.c
+153
-230
src/option.c
src/option.c
+15
-19
src/rfc2131.c
src/rfc2131.c
+219
-146
src/util.c
src/util.c
+50
-15
No files found.
CHANGELOG
View file @
5e9e0efb
...
...
@@ -1694,3 +1694,94 @@ version 2.27
Generalised the DHCP code to cope with any hardware
address type, at least on Linux. *BSD is still limited to
ethernet only.
version 2.28
Eliminated all raw network access when running on
Linux. All DHCP network activity now goes through the IP
stack. Packet sockets are no longer required. Apart from
being a neat hack, this should also allow DHCP over IPsec
to work better. On *BSD and OS X, the old method of raw net
access through BPF is retained.
Simplified build options. Networking is now slimmed down
to a choice of "linux" or "other". Netlink is always used
under Linux. Since netlink has been available since 2.2
and non-optional in an IPv4-configured kernel since 2.4,
and the dnsmasq netlink code is now well tested, this
should work out fine.
Removed decayed build support for libc5 and Solaris.
Removed pselect code: use a pipe for race-free signal
handling instead, as this works everywhere.
No longer enable the ISC leasefile reading code in the
distributed sources. I doubt there are many people left
using this 1.x compatibility code. Those that are will
have to explicitly enable it in src/config.h.
Don't send the "DHCP maximum message size" option, even if
requested. RFC2131 says this is a "MUST NOT".
Support larger-than-minimum DHCP message. Dnsmasq is now
happy to get larger than 576-byte DHCP messages, and will
return large messages, if permitted by the "maximum
message size" option of the message to which it is
replying. There's now an arbitrary sanity limit of 16384
bytes.
Added --no-ping option. This fixes an RFC2131 "SHOULD".
Building on the 2.27 MAC-address changes, allow clients to
provide no MAC address at all, relying on the client-id as
a unique identifier. This should make things like DHCP for
USB come easier.
Fixed regression in netlink code under 2.2.x kernels which
occurred in 2.27. Erik Jan Tromp is the vintage kernel fan
who found this. P.S. It looks like this "netlink bind:
permission denied" problem occured in kernels at least as
late a 2.4.18. Good information from Alain Richoux.
Added a warning when it's impossible to give a host its
configured address because the address is leased
elsewhere. A sensible suggestion from Mircea Bardac.
Added minimal support for RFC 3046 DHCP relay agent-id
options. The DHCP server now echoes these back to the
relay, as required by the RFC. Also, RFC 3527 link selection
sub-options are honoured.
Set the process "dumpable" flag when running in debug
mode: this makes getting core dumps from root processes
much easier.
Fixed one-byte buffer overflow which seems to only cause
problems when dnsmasq is linked with uclibc. Thanks to
Eric House and Eric Spakman for help in chasing this down.
Tolerate configuration screwups which lead to the DHCP
server attemping to allocate its own address to a
client; eg setting the whole subnet range as a DHCP
range. Addresses in use by the server are now excluded
from use by clients.
Did some thinking about HAVE_BROKEN_RTC mode, and made it
much simpler and better. The key is to just keep lease
lengths in the lease file. Since these normally never
change, even as the lease is renewed, the lease file never
needs to change except when machines arrive on the network
or leave. This eliminates the code for timed writes, and
reduces the amount of wear on a flash filesystem to the
absolute minimum. Also re-did the basic time function in
this mode to use the portable times(), rather than parsing
/proc/uptime.
Believe the source port number when replying to unicast
DHCP requests and DHCP requests via a relay, instead of always
using the standard ports. This will allow relays on
non-standard ports and DHCPINFORM from unprivileged ports
to work. The source port sent by unconfigured clients is still
ignored, since this may be unreliable. This means that a DHCP
client must use the standard port to do full configuration.
FAQ
View file @
5e9e0efb
...
...
@@ -369,6 +369,12 @@ A: Yes, dynmaically allocated IP addresses are checked by sending an
other DHCP requests during this time. To avoid dropping requests,
the address probe may be skipped when dnsmasq is under heavy load.
Q: I'm using dnsmasq on a machine with the Firestarter firewall, and
DHCP doesn't work. What's the problem?
A: This a variant on the iptables problem. Explicit details on how to
proceed can be found at
http://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2005q3/000431.html
...
...
bld/Makefile
View file @
5e9e0efb
# Uncomment this on Solaris.
#LIBS = -lsocket -lnsl
CFLAGS
?=
-O2
PKG_CONFIG
?=
pkg-config
OBJS
=
cache.o rfc1035.o util.o option.o forward.o isc.o network.o
\
dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o
dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o
bpf.o
.c.o
:
$(CC)
$(CFLAGS)
$(I18N)
`
../bld/pkg-wrapper
$(PKG_CONFIG)
--cflags
dbus-1
`
$(RPM_OPT_FLAGS)
-Wall
-W
-c
$<
...
...
dnsmasq-rh.spec
View file @
5e9e0efb
...
...
@@ -5,7 +5,7 @@
###############################################################################
Name: dnsmasq
Version: 2.2
7
Version: 2.2
8
Release: 1
License: GPL
Group: System Environment/Daemons
...
...
dnsmasq-suse.spec
View file @
5e9e0efb
...
...
@@ -5,7 +5,7 @@
###############################################################################
Name: dnsmasq
Version: 2.2
7
Version: 2.2
8
Release: 1
Copyright: GPL
Group: Productivity/Networking/DNS/Servers
...
...
man/dnsmasq.8
View file @
5e9e0efb
...
...
@@ -525,6 +525,13 @@ with care, since each address allocated to a BOOTP client is leased
forever, and therefore becomes permanently unavailable for re-use by
other hosts.
.TP
.B \-5, --no-ping
By default, the DHCP server will attempt to ensure that an address in
not in use before allocating it to a host. It does this by sending an
ICMP echo request (aka "ping") to the address in question. If it gets
a reply, then the address must already be in use, and another is
tried. This flag disables this check. Use with caution.
.TP
.B \-l, --dhcp-leasefile=<path>
Use the specified file to store DHCP lease information. If this option
is given but no dhcp-range option is given then dnsmasq version 1
...
...
po/de.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2005-09-27 09:37+0100\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: German <de@li.org>\n"
...
...
@@ -15,37 +15,37 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr ""
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, c-format
msgid "bad address at %s line %d"
msgstr ""
# @Simon: Here I need an example to understand it :)
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr ""
# @Simon: Here I need an example to understand it :)
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, 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:67
0
#: cache.c:67
5
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:72
3
#: cache.c:72
8
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
...
...
@@ -56,9 +56,11 @@ 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:767
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
#: cache.c:772
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
"Cache Größe %d, %d/%d Cache-Einfügungen verwendeten nicht abgelaufene Cache-"
"Einträge wieder."
...
...
@@ -68,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:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr "Speicher nicht verfügbar"
...
...
@@ -77,7 +79,7 @@ msgstr "Speicher nicht verfügbar"
# @Simon: ("keinen Speicher" = "no memory", "... nicht bekommen" = "... not get")
# @Simon: both would be correct - but would sound rather clumsy in german
# @Simon: how about "Nicht genügend Speicher verfügbar" = "Not enough memory available" ?
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s in Zeile %d von %%s"
...
...
@@ -85,12 +87,12 @@ msgstr "%s in Zeile %d von %%s"
# @Simon: I would like to have an example :) - instead of "von" it would be possible to use "aus",
# @Simon: both translate to "of" and nothing else, but depending on the sense one could be better
# @Simon: than the other.
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr "Start gescheitert"
# @Simon: not perfect but I cannot get nearer right now.
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr "unendlich"
...
...
@@ -360,6 +362,10 @@ msgstr ""
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr ""
...
...
@@ -441,468 +447,481 @@ msgstr ""
msgid "bad MX target"
msgstr ""
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr ""
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr ""
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr ""
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr ""
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr ""
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr ""
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr ""
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr ""
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr ""
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr ""
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr ""
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr ""
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr ""
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr ""
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr ""
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr ""
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
#: option.c:18
82
#: option.c:18
78
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
#: option.c:188
9
#: option.c:188
5
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
#: option.c:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr ""
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr ""
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr ""
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr ""
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr ""
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr ""
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr ""
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr ""
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr ""
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr ""
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr ""
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
#: dnsmasq.c:
115
#: dnsmasq.c:
93
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
#: dnsmasq.c:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr ""
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr ""
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr ""
#: dnsmasq.c:163
#: dnsmasq.c:141
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
#: dnsmasq.c:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr ""
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
#: dnsmasq.c:292
#: dnsmasq.c:192
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr ""
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr ""
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr ""
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
#: dnsmasq.c:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr ""
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr ""
#: dnsmasq.c:
522
msgid "
connected to system DBus
"
#: dnsmasq.c:
497
msgid "
exiting on receipt of SIGTERM
"
msgstr ""
#: dnsmasq.c:5
33
msgid "
exiting on receipt of SIGTERM
"
#: dnsmasq.c:5
24
msgid "
connected to system DBus
"
msgstr ""
#: dhcp.c:
25
#: dhcp.c:
32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr ""
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr ""
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr ""
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr ""
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr ""
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr ""
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr ""
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, c-format
msgid "bad line at %s line %d"
msgstr ""
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr ""
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr ""
#: lease.c:179
msgid "failed to write"
#: lease.c:118
#, c-format
msgid "failed to write %s: %m (retry in %ds)"
msgstr ""
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr ""
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr ""
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr ""
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr ""
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr ""
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr ""
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr ""
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr ""
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr ""
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr ""
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr ""
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr ""
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr ""
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr ""
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr ""
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr ""
#: rfc2131.c:
871
#: rfc2131.c:
946
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
#: rfc2131.c:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr ""
#: netlink.c:41
#, c-format
msgid "cannot bind netlink socket: %s"
msgid "cannot create RTnetlink socket: %s"
msgstr ""
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr ""
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr ""
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
#: bpf.c:74
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
po/es.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2005-10-07 11:04+0100\n"
"Last-Translator: Christopher Chatham <chrislinux@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
...
...
@@ -15,31 +15,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr "no se pudo cargar nombres desde %s: %m"
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "nombre errneo en %s lnea %d"
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr "nombre errneo en %s lnea %d"
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr "direccines %s - %d ledas"
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr "el cach fue limpiado"
#: cache.c:72
3
#: cache.c:72
8
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
...
...
@@ -48,27 +48,29 @@ msgstr ""
"no otorgando nombre %s al arriendo DHCP de %s porque el nombre existe en %s "
"con direccin %s"
#: cache.c:767
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
#: cache.c:772
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
"tamao de cach %d, %d/%d insercines de cach reutilizaron entradas no "
"vencidas."
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr "no se pudo conseguir memoria"
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s en lnea %d de %%s"
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr "el intento de inicio ha FALLADO"
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr "infinito"
...
...
@@ -326,6 +328,10 @@ msgstr "Habilitar alocaci
msgid "Map MAC address (with wildcards) to option set."
msgstr "Trazar clase de vendedor DHCP a opcin fijada."
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr "falta \""
...
...
@@ -411,477 +417,500 @@ msgstr "nombre MX err
msgid "bad MX target"
msgstr "destino MX errneo"
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr "puerto errneo"
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr "dhcp-range (rango DHCP) errneo"
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr "rango DHCP inconsistente"
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr "dhcp-host errneo"
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr "dhcp-option errneo"
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr "dominio errneo en dhcp-option"
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr "opcin dhcp-option demasiado larga"
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr "rcord TXT errneo"
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr "rcord TXT demasiado largo"
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr "rcord SRV errneo"
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr "destino SRV errneo"
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr "nmero de puerto invlido"
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr "prioridad invlida"
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr "peso invlido"
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr "error"
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr "opciones de lnea de comandos errneas: %s."
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr "no se puede obtener host-name (nombre de host): %s"
#: option.c:18
82
#: option.c:18
78
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "solo un archivo resolv.conf permitido en modo no-poll."
#: option.c:188
9
#: option.c:188
5
msgid "must have exactly one resolv.conf to read domain from."
msgstr "debe haber exactamente un resolv.conf desde donde leer dominio."
#: option.c:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr "no se pudo leer %s: %m"
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr "ninguna directiva de bsqueda encontrada en %s"
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "servidor DNS %s se reuso a hacer una bsqueda recursiva"
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr ""
"desbordamiento en la tabla de reenvio: revisar si hay loops de servidor."
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr "no se pudo accesar %s: %m"
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr "no se pudo cargar %s: %m"
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr "leyendo %s"
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr "nombre errneo en %s"
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
"Ignorando arriendo DHCP para %s porque tiene una parte ilegal de dominio"
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr "no se pudo crear un socket escuchador: %s"
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "no se pudo fijar opciones IPv6 sobre el socket escuchador: %s"
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "no se pudo acoplar socket escuchador para %s: %s"
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr "no se pudo escuchar en el socket: %s"
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorando servidor DNS %s - interface local"
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorando servidor DNS %s - no se pudo crear/acoplar socket: %m"
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr "dominio"
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr "no calificado"
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr "dominios"
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr "usando direcciones locales solo para %s %s"
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "usando servidor DNS %s#%d para %s %s"
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr "usando servidor DNS %s#%d"
#: dnsmasq.c:
115
#: dnsmasq.c:
93
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
"Integracin dhcpd ISC no disponible: fijar HAVE_ISC_READER en src/config.h"
#: dnsmasq.c:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "no se pudo encontrar lista de interfaces: %s"
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr "interface desconocida %s"
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr "ninguna interface con direccin %s"
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr "no se puede abrir %s:%s"
#: dnsmasq.c:163
#: dnsmasq.c:141
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:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr "error DBus: %s"
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus no disponible: fijar HAVE_DBUS en src/config.h"
#: dnsmasq.c:292
#: dnsmasq.c:192
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "no se puede leer %s: %s"
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr "versin %s iniciada, tamao de cach %d"
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr "versin %s iniciada, cach deshabilitado"
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr "opciones de compilacin: %s"
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr "soporte DBus habilitado: conectado a bus de sistema"
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr "soporte DBus habilitado: coneccin a bus pendiente"
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
"fijando opcin --bind-interfaces debido a limitaciones de sistema operativo"
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "advertencia: interface %s no existe actualmente"
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, arriendos estticos solo en %.0s%s, tiempo de arriendo %s"
#: dnsmasq.c:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, rango de IP %s -- %s, tiempo de arriendo %s"
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr "DHCP, %s ser escrito cada %s"
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr "corriendo como root"
#: dnsmasq.c:522
msgid "connected to system DBus"
msgstr "conectado a DBus de sistema"
#: dnsmasq.c:533
#: dnsmasq.c:497
msgid "exiting on receipt of SIGTERM"
msgstr "haciendo exit al haber recibido SIGTERM"
#: dhcp.c:25
#: dnsmasq.c:524
msgid "connected to system DBus"
msgstr "conectado a DBus de sistema"
#: dhcp.c:32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "no se puede crear socket DHCP: %s"
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "no se pudo fijar opciones en socket DHCP: %s"
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr "no se pudo fijar SO_REUSEADDR en socket DHCP: %s"
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "no se pudo acoplar socket de servidor DHCP: %s"
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "no se puede crear socket crudo ICMP: %s."
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "no se puede crear socket BPF DHCP: %s"
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
"no se puede crear socket para paquetes DHCP: %s. Est CONFIG_PACKET "
"habilitado en el kernel?"
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "direccin IP duplicada en directiva dhcp-config."
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr "pedido DHCP por hardware no soportado tipo (%d) recibido en %s"
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "rango DHCP %s -- %s no coincide con mscara de red %s"
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr "no se pudo leer %s:%m"
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "nombre errneo en %s lnea %d"
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "direccin IP %s (%s) duplicada en directiva dhcp-config"
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
"Ignorando nombre de host DHCP %s porque contiene una parte ilegal de dominio."
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr "no se puede abrir o crear archivo de arriendos: %s"
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr "demasiados arriendos almacenados"
#: lease.c:1
79
#, fuzzy
msgid "failed to write"
msgstr "no se pudo leer %s:%m"
#: lease.c:1
18
#, fuzzy
, c-format
msgid "failed to write
%s: %m (retry in %ds)
"
msgstr "no se pudo leer %s:
%m"
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "ningn rango de direccines disponible para pedido DHCP %s %s"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr "con selector de subred"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr "va"
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr "deshabilitado"
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr "direccin en uso"
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr "ninguna direccin configurada"
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr "ninguna direccin disponible"
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr "no queda ningn arriendo"
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr "red equivocada"
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr "deshabilitando direccin DHCP esttica %s"
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr "arriendo desconocido"
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr "ignorado"
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr "direccin equivocada"
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr "arriendo no encontrado"
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr "direccin no disponible"
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr "arriendo esttico disponible"
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr "direccin reservada"
#: rfc2131.c:
871
#: rfc2131.c:
946
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr "no se puede enviar opcin DHCP %d: no queda espacio en el paquete"
#: rfc2131.c:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Ms de una clase de vendedor coincide, usando %s"
#: netlink.c:41
#, c-format
msgid "cannot
bind
netlink socket: %s"
#,
fuzzy,
c-format
msgid "cannot
create RT
netlink socket: %s"
msgstr "no se puede acoplar socket netlink: %s"
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
"intento de fijar direccin IPv6 a servidor va DBus - no hay soporte IPv6"
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr "fijando servidores upstream desde DBus"
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr "no se pudo registrar un manejador de mensajes DBus"
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "no se puede crear socket BPF DHCP: %s"
#: bpf.c:74
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "pedido DHCP por hardware no soportado tipo (%d) recibido en %s"
#~ msgid "cannot open %s:%s"
#~ msgstr "no se puede abrir %s:%s"
#~ msgid "DHCP, %s will be written every %s"
#~ msgstr "DHCP, %s ser escrito cada %s"
#~ msgid ""
#~ "cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
#~ "kernel?"
#~ msgstr ""
#~ "no se puede crear socket para paquetes DHCP: %s. Est CONFIG_PACKET "
#~ "habilitado en el kernel?"
po/fi.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2005-11-28 22:05+0000\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
...
...
@@ -15,56 +15,58 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr ""
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, c-format
msgid "bad address at %s line %d"
msgstr ""
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr ""
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr ""
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr ""
#: cache.c:72
3
#: cache.c:72
8
#, 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:7
67
#: cache.c:7
72
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr ""
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr ""
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr ""
...
...
@@ -311,6 +313,10 @@ msgstr ""
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr ""
...
...
@@ -392,468 +398,481 @@ msgstr ""
msgid "bad MX target"
msgstr ""
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr ""
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr ""
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr ""
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr ""
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr ""
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr ""
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr ""
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr ""
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr ""
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr ""
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr ""
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr ""
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr ""
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr ""
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr ""
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr ""
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
#: option.c:18
82
#: option.c:18
78
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
#: option.c:188
9
#: option.c:188
5
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
#: option.c:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr ""
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr ""
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr ""
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr ""
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr ""
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr ""
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr ""
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr ""
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr ""
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr ""
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr ""
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
#: dnsmasq.c:
115
#: dnsmasq.c:
93
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
#: dnsmasq.c:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr ""
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr ""
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr ""
#: dnsmasq.c:163
#: dnsmasq.c:141
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
#: dnsmasq.c:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr ""
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
#: dnsmasq.c:292
#: dnsmasq.c:192
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr ""
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr ""
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr ""
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
#: dnsmasq.c:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr ""
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr ""
#: dnsmasq.c:
522
msgid "
connected to system DBus
"
#: dnsmasq.c:
497
msgid "
exiting on receipt of SIGTERM
"
msgstr ""
#: dnsmasq.c:5
33
msgid "
exiting on receipt of SIGTERM
"
#: dnsmasq.c:5
24
msgid "
connected to system DBus
"
msgstr ""
#: dhcp.c:
25
#: dhcp.c:
32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr ""
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr ""
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr ""
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr ""
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr ""
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr ""
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr ""
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, c-format
msgid "bad line at %s line %d"
msgstr ""
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr ""
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr ""
#: lease.c:179
msgid "failed to write"
#: lease.c:118
#, c-format
msgid "failed to write %s: %m (retry in %ds)"
msgstr ""
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr ""
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr ""
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr ""
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr ""
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr ""
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr ""
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr ""
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr ""
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr ""
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr ""
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr ""
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr ""
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr ""
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr ""
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr ""
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr ""
#: rfc2131.c:
871
#: rfc2131.c:
946
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
#: rfc2131.c:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr ""
#: netlink.c:41
#, c-format
msgid "cannot bind netlink socket: %s"
msgid "cannot create RTnetlink socket: %s"
msgstr ""
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr ""
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr ""
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
#: bpf.c:74
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
po/fr.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2005-10-02 19:05+0100\n"
"Last-Translator: Lionel Tricon <lionel.tricon@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\n"
...
...
@@ -15,31 +15,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr "Impossible de charger les noms a partir de %s: %m"
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr "lecture %s - %d adresses"
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr "cache nettoye"
#: cache.c:72
3
#: cache.c:72
8
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
...
...
@@ -48,27 +48,29 @@ msgstr ""
"ne donne pas de nom %s au bail DHCP de %s parce-que le nom existe dans %s "
"avec l'adresse %s"
#: cache.c:767
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
#: cache.c:772
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
"taille de cache %d, %d/%d insertions dans le cache ont reutilisees des "
"entrees qui n'ont pas expirees"
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr "impossible d'allouer de la memoire"
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s a la ligne %d de %%s"
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr "IMPOSSIBLE de demarrer"
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr "illimite"
...
...
@@ -335,6 +337,10 @@ msgstr "Autorise l'allocation dynamique d'adresse pour bootp."
msgid "Map MAC address (with wildcards) to option set."
msgstr "Associe les 'vendor class' DHCP aux options."
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr "il manque \""
...
...
@@ -421,485 +427,508 @@ msgstr "mauvais nom MX"
msgid "bad MX target"
msgstr "mauvaise cible MX"
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr "mauvais port"
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr "mauvaise plage d'adresses DHCP (dhcp-range)"
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr "plage d'adresses DHCP incoherente"
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr "mauvais dhcp-host"
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr "mauvais dhcp-option"
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr "mauvais domaine dans dhcp-option"
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr "dhcp-option trop long"
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr "mauvais champ TXT"
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr "chaîne du champ TXT trop longue"
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr "mauvais champ SRV"
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr "mauvaise cible SRV"
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr "numero de port invalide"
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr "priorite invalide"
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr "poids invalide"
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr "erreur"
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr "mauvaises options en ligne de commande: %s."
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr "ne peut pas obtenir le nom de la machine: %s"
#: option.c:18
82
#: option.c:18
78
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "seul un fichier resolv.conf est autorise dans le mode no-poll"
#: option.c:188
9
#: option.c:188
5
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
"on doit avoir exactement un seul fichier resolv.conf pour y recuperer le nom "
"de domaine."
#: option.c:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr "impossible de lire %s: %m"
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr "pas de directive de recherche trouvee dans %s"
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "le serveur de nom %s a refuse de faire une recherche recursive"
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr ""
"Table de stockage des requetes DNS pleine : verifiez la configuration du "
"serveur (risque de boucle recursive)."
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr "impossible d'acceder a %s: %m"
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr "impossible de charger %s: %m"
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr "Lecture %s"
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr "mauvais nom dans %s"
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
"On ignore le bail DHCP pour %s car il possede un nom de domaine illegal"
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr "impossible de creer une socket de lecture: %s"
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "impossible d'activer les options IPV6 sur la socket de lecture: %s"
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "impossible de lier la socket de lecture pour %s: %s"
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr "impossible de lire sur la socket: %s"
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "on ignore le serveur de nom %s - interface locale"
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "on ignore le serveur de nom %s - ne peut construire/lier la socket: %m"
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr "domaine"
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr "non-qualifie"
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr "domaines"
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr "on utilise les adresses locales seulement pour %s %s"
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "on utilise le serveur de nom %s#%d pour %s %s"
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr "on utilise le serveur de nom %s#%d"
#: dnsmasq.c:
115
#: dnsmasq.c:
93
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
"L'integration DHCP ISC n'est pas disponible: activez HAVE_ISC_READER dans "
"src/config.h"
#: dnsmasq.c:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "impossible de trouver la liste des interfaces: %s"
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr "interface %s inconnue"
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr "pas d'interface avec l'adresse %s"
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr "ne peut pas ouvrir %s:%s"
#: dnsmasq.c:163
#: dnsmasq.c:141
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
"on doit declarer exactement une interface sur les systemes sans IP_RECVIF"
#: dnsmasq.c:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr "Erreur DBus: %s"
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus n'est pas disponible: declarez HAVE_DBUS dans src/config.h"
#: dnsmasq.c:292
#: dnsmasq.c:192
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "Ne peut pas lire %s: %s"
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr "demarre, version %s taille de cache %d"
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr "demarre, version %s cache desactive"
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr "options a la compilation: %s"
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr "Support DBus autorise: connecte au bus systeme"
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr "Support DBus autorise: connexion au bus en suspend"
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "Active l'option --bind-interfaces a cause des limitations de l'OS"
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "Attention: l'interface %s n'existe pas actuellement"
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
"DHCP, baux statiques seulement sur %.0s%s, duree de validite de bail %s"
#: dnsmasq.c:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, plage d'adresse %s -- %s, duree de bail %s"
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr "DHCP, %s sera ecrit chaque %s"
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr "execute sous root"
#: dnsmasq.c:522
msgid "connected to system DBus"
msgstr "connecte au systeme DBus"
#: dnsmasq.c:533
#: dnsmasq.c:497
msgid "exiting on receipt of SIGTERM"
msgstr "sortie sur reception du signal SIGTERM"
#: dhcp.c:25
#: dnsmasq.c:524
msgid "connected to system DBus"
msgstr "connecte au systeme DBus"
#: dhcp.c:32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "ne peut creer la socket DHCP : %s"
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "impossible d'appliquer les options sur la socket DHCP: %s"
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr "impossible de declarer SO_REUSEADDR sur la socket DHCP: %s"
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "impossible de lier la socket serveur DHCP: %s"
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "ne peut creer de socket en mode raw pour ICMP: %s."
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "impossible de creer une socket BPF pour DHCP: %s"
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
"impossible de creer une socket DHCP en mode paquet: %s. Est-ce que "
"CONFIG_PACKET est active dans votre noyau?"
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "adresse IP %s dupliquee dans la directive dhcp-config."
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr "requete DHCP pour un type de materiel non supporte (%d) recue sur %s"
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
"La plage d'adresses DHCP %s -- %s n'est pas coherente avec le masque de "
"reseau %s"
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr "impossible de lire %s:%m"
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "mauvais nom dans %s ligne %d"
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresse IP %s (%s) dupliquee dans la directive dhcp-config."
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
"On ignore le nom de machine DHCP %s parce-qu'il possede un nom de domaine "
"illegal"
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr "ne peut ouvrir ou creer des fichiers de baux: %s"
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr "beaucoup trop de baux enregistres"
#: lease.c:1
79
#, fuzzy
msgid "failed to write"
msgstr "impossible de lire %s:%m"
#: lease.c:1
18
#, fuzzy
, c-format
msgid "failed to write
%s: %m (retry in %ds)
"
msgstr "impossible de lire %s:
%m"
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "pas de plage d'adresse disponible pour la requete DHCP %s %s"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr "avec selecteur de sous-reseau"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr "par l'intermediaire de"
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr "desactive"
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr "adresse deja utilisee"
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr "pas d'adresse configuree"
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr "pas d'adresse disponible"
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr "aucun baux laisses"
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr "mauvais reseau"
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr "desactive l'adresse statique DHCP %s"
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr "bail inconnu"
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr "ignore"
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr "mauvaise adresse"
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr "bail non trouve"
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr "adresse non disponible"
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr "bail statique disponible"
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr "adresse reservee"
#: rfc2131.c:
871
#: rfc2131.c:
946
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
#: rfc2131.c:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Plus d'une seule classe de fournisseur correspond, on utilise %s"
#: netlink.c:41
#, c-format
msgid "cannot
bind
netlink socket: %s"
#,
fuzzy,
c-format
msgid "cannot
create RT
netlink socket: %s"
msgstr "ne peux lier une socket netlink: %s"
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
"tentative de lier une adresse serveur IPV6 via DBus - pas de support IPV6"
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr "configuration des serveurs amonts a partir de DBus"
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr "ne peut enregistrer une routine de traitement des messages DBus"
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "impossible de creer une socket BPF pour DHCP: %s"
#: bpf.c:74
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "requete DHCP pour un type de materiel non supporte (%d) recue sur %s"
#~ msgid "cannot open %s:%s"
#~ msgstr "ne peut pas ouvrir %s:%s"
#~ msgid "DHCP, %s will be written every %s"
#~ msgstr "DHCP, %s sera ecrit chaque %s"
#~ msgid ""
#~ "cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
#~ "kernel?"
#~ msgstr ""
#~ "impossible de creer une socket DHCP en mode paquet: %s. Est-ce que "
#~ "CONFIG_PACKET est active dans votre noyau?"
po/id.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2005-10-07 11:45+0100\n"
"Last-Translator: Salman AS <sas@salman.or.id>\n"
"Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
...
...
@@ -15,36 +15,36 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
# OK
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr "gagal memuat nama-nama dari %s: %m"
# OK
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr "membaca %s - %d alamat"
# OK
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr "cache telah dihapus"
# OK
#: cache.c:72
3
#: cache.c:72
8
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
...
...
@@ -54,30 +54,32 @@ msgstr ""
"sdengan alamat %s"
# OK
#: cache.c:767
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
#: cache.c:772
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
"ukuran cache %d, %d/%d penyisipan cache menimpa cache yang belum kadaluwarsa"
# OK
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr "tidak bisa mendapatkan memory"
# OK
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s pada baris %d dari %%s"
# OK
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr "GAGAL untuk memulai"
# OK
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr "tak terbatas"
...
...
@@ -385,6 +387,10 @@ msgstr "Mungkinkan alokasi alamat dinamis untuk bootp."
msgid "Map MAC address (with wildcards) to option set."
msgstr "Memetakan kelas vendor DHCP ke daftar pilihan."
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
# OK
#: option.c:396
msgid "missing \""
...
...
@@ -490,230 +496,238 @@ msgid "bad MX target"
msgstr "target MX salah"
# OK
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr "port salah"
# OK
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr "dhcp-range salah"
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
# OK
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr "jangkauan DHCP tidak konsisten"
# OK
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr "dhcp-host salah"
# OK
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr "dhcp-option salah"
# OK
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr "domain dalam dhcp-option salah"
# OK
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr "dhcp-option terlalu panjang"
# OK
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr "rekord TXT salah"
# OK
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr "string rekord TXT terlalu panjang"
# OK
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr "rekord SRV salah"
# OK
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr "target SRV salah"
# OK
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr "nomor port tidak benar"
# OK
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr "prioritas tidak benar"
# OK
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr "weight tidak benar"
# OK
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr "kesalahan"
# OK
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr "pilihan baris perintah salah: %s."
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
# OK
#: option.c:18
53
#: option.c:18
49
#, c-format
msgid "cannot get host-name: %s"
msgstr "tidak bisa mendapatkan host-name: %s"
# OK
#: option.c:18
82
#: option.c:18
78
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:188
9
#: option.c:188
5
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:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr "gagal membaca %s: %m"
# OK
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr "tidak ditemukan direktif search di %s"
# OK
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "nameserver %s menolak melakukan resolusi rekursif"
# OK
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr "meneruskan tabel overflow: memeriksa apakah terjadi loop server."
# OK
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr "gagal mengakses %s: %m"
# OK
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr "gagal memuat %S: %m"
# OK
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr "membaca %s"
# OK
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr "kesalahan nama di %s"
# OK
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
"Mengabaikan lease DHCP untuk %s sebab terdapat bagian domain yang tidak sah"
# OK
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr "gagal membuat socket: %s "
# OK
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "gagal menyetel IPV6 pada socket: %s"
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "gagal mem-bind socket untuk mendengarkan %s: %s"
# OK
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr "gagal mendengarkan di socket: %s"
# OK
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "mengabaikan nameserver %s - antarmuka lokal"
# OK
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "mengabaikan nameserver %s - tak dapat membuat/mem-bind socket: %m"
# OK
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr "domain"
# OK
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr "tidak memenuhi syarat"
# OK
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr "domain-domain"
# OK
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr "menggunakan alamat lokal saja untuk %s %s"
# OK
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "menggunakan nameserver %s#%d untuk %s %s"
# OK
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr "menggunakan nameserver %s#%d"
# OK
#: dnsmasq.c:
115
#: dnsmasq.c:
93
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
...
...
@@ -721,333 +735,320 @@ msgstr ""
"config.h"
# OK
#: dnsmasq.c:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "gagal mendapatkan daftar antarmuka: %s"
# OK
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr "antarmuka tidak dikenal %s"
# OK
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr "tidak ada antarmuka dengan alamat %s"
# OK
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr "tidak bisa membuka %s:%s"
# OK
#: dnsmasq.c:163
#: dnsmasq.c:141
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:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr "DBus error: %s"
# OK
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
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:292
#: dnsmasq.c:192
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "tidak bisa membaca %s: %s"
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
# OK
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr "dimulai, versi %s ukuran cache %d"
# OK
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr "dimulai, cache versi %s di disable"
# OK
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr "pilihan-pilihan saat kompilasi: %s"
# OK
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr "dukungan DBus dimungkinkan: terkoneksi pada bus sistem"
# OK
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr "dukungan DBus dimungkinkan: koneksi bus ditunda"
# OK
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "setelan opsi --bind-interfaces disebabkan keterbatasan OS"
# OK
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "peringatan: antarmuka %s tidak ada"
# OK
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, 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:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, jangkaun IP %s -- %s, waktu lease %s"
# OK
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr "DHCP, %s akan ditulis setiap %s"
# OK
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr "berjalan menggunakan root"
#: dnsmasq.c:497
msgid "exiting on receipt of SIGTERM"
msgstr "keluar karena menerima SIGTERM"
# OK
#: dnsmasq.c:52
2
#: dnsmasq.c:52
4
msgid "connected to system DBus"
msgstr "terhubung ke sistem DBus"
#: dnsmasq.c:533
msgid "exiting on receipt of SIGTERM"
msgstr "keluar karena menerima SIGTERM"
# OK
#: dhcp.c:
25
#: dhcp.c:
32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "tidak bisa membuat socket DHCP: %s"
# OK
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "gagal menyetel opsi pada socket DHCP: %s"
# OK
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr "gagal menyetel SO_REUSEADDR pada socket DHCP: %s"
# OK
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "gagal mem-bind socket server DHCP: %s"
# OK
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "tidak dapat membuat socket ICMP raw: %s"
# OK
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "tidak dapat membuat socket DHCP BPF: %s"
# OK
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
"tidak dapat membuat socket packet DHCP: %s. Apakah CONFIG_PACKET "
"dimungkinkan pada kernel?"
# OK
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "alamat IP kembar %s dalam direktif dhcp-config"
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
# OK
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr ""
"permintaan DHCP untuk tipe hardware yang tidak didukung (%d) diterima pada %s"
# OK
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "jangkauan DHCP %s -- %s tidak konsisten dengan netmask %s"
# OK
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr "gagal membaca %s:%m"
# OK
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "kesalahan nama pada %s baris %d"
# OK
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "alamat IP kembar %s (%s) dalam direktif dhcp-config"
# OK
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
"Mengabaikan nama host DHCP %s sebab memiliki bagian domain yang tidak sah"
# OK
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr "tidak dapat membuka atau membuat file lease: %s"
# OK
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr "terlalu banyak lease yang disimpan"
# OK
#: lease.c:1
79
#, fuzzy
msgid "failed to write"
msgstr "gagal membaca %s:%m"
#: lease.c:1
18
#, fuzzy
, c-format
msgid "failed to write
%s: %m (retry in %ds)
"
msgstr "gagal membaca %s:
%m"
# OK
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, 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:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr "dengan pemilih subnet"
# OK
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr "lewat"
# OK
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr "di disable"
# OK
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr "alamat telah digunakan"
# OK
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr "tak ada alamat yang disetel"
# OK
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr "tak ada alamat yang tersedia"
# OK
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr "tak ada lease yang tersisa"
# OK
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr "jaringan yang salah"
# OK
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr "men-disable alamat statik DHCP %s"
# OK
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr "lease tidak diketahui"
# OK
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr "diabaikan"
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
# OK
#: rfc2131.c:6
19
#: rfc2131.c:6
70
msgid "wrong address"
msgstr "alamat salah"
# OK
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr "lease tak ditemukan"
# OK
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr "alamat tak tersedia"
# OK
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr "lease statik tak tersedia"
# OK
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr "alamat telah dipesan"
#: rfc2131.c:
871
#: rfc2131.c:
946
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
# OK
#: rfc2131.c:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Lebih dari satu kelas vendor yang sesuai, menggunakan %s"
# OK
#: netlink.c:41
#, c-format
msgid "cannot
bind
netlink socket: %s"
#,
fuzzy,
c-format
msgid "cannot
create RT
netlink socket: %s"
msgstr "tidak bisa mem-bind netlink socket: %s"
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
# OK
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
...
...
@@ -1056,11 +1057,40 @@ msgstr ""
"untuk IPv6"
# OK
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr "menyetel server-server di atas dengan DBus"
# OK
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr "tidak bisa mendaftar sebuah DBus message handler"
# OK
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "tidak dapat membuat socket DHCP BPF: %s"
# OK
#: bpf.c:74
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
"permintaan DHCP untuk tipe hardware yang tidak didukung (%d) diterima pada %s"
# OK
#~ msgid "cannot open %s:%s"
#~ msgstr "tidak bisa membuka %s:%s"
# OK
#~ msgid "DHCP, %s will be written every %s"
#~ msgstr "DHCP, %s akan ditulis setiap %s"
# OK
#~ msgid ""
#~ "cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
#~ "kernel?"
#~ msgstr ""
#~ "tidak dapat membuat socket packet DHCP: %s. Apakah CONFIG_PACKET "
#~ "dimungkinkan pada kernel?"
po/no.po
View file @
5e9e0efb
...
...
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.25\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2006-01-11 17:39+0000\n"
"Last-Translator: Jan Erik Askildt <jeaskildt@gmail.com>\n"
"Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n"
...
...
@@ -17,31 +17,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr "feilet laste navn fra %s: %m"
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, c-format
msgid "bad address at %s line %d"
msgstr "drlig adresse ved %s linje %d"
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr "drlig navn ved %s linje %d"
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr "les %s - %d adresser"
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr "mellomlager tmt"
#: cache.c:72
3
#: cache.c:72
8
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
...
...
@@ -50,27 +50,29 @@ msgstr ""
"gir ikke navnet %s til DHCP leien for %s fordi navnet eksisterer i %s med "
"adressen %s"
#: cache.c:767
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
#: cache.c:772
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
"mellomlager strrelse %d, %d/%d mellomlager innsettinger re-bruker "
"mellomlager plasser som ikke er utlpt"
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr "kunne ikke f minne"
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s p linje %d av %%s"
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr "FEILET starte opp"
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr "uendelig"
...
...
@@ -318,6 +320,10 @@ msgstr "Aktiver dynamisk adresse allokering for bootp."
msgid "Map MAC address (with wildcards) to option set."
msgstr "Map DHCP produsent klasse til opsjon sett."
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr "mangler \""
...
...
@@ -403,471 +409,498 @@ msgstr "d
msgid "bad MX target"
msgstr "drlig MX ml"
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr "drlig port"
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr "drlig dhcp-omrde"
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr "ikke konsistent DHCP omrde"
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr "drlig dhcp-vert"
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr "drlig dhcp-opsjon"
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr "drlig domene i dhcp-opsjon"
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr "dhcp-opsjon for lang"
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr "drlig TXT post"
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr "TXT post streng for lang"
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr "drlig SRV post"
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr "drlig SRV ml"
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr "ugyldig portnummer"
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr "ugyldig prioritet"
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr "ugyldig vekt"
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr "feil"
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr "drlige kommandlinje opsjoner: %s."
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr "klarer ikke f vertsnavn: %s"
#: option.c:18
82
#: option.c:18
78
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr "kun en resolv.conf fil tillat i no-poll modus."
#: option.c:188
9
#: option.c:188
5
msgid "must have exactly one resolv.conf to read domain from."
msgstr "m ha nyaktig en resolv.conf lese domene fra."
#: option.c:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr "feilet lese %s: %m"
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr "intet ske direktiv funnet i %s"
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "navnetjener %s nektet gjre et rekursivt oppslag"
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr "fremsendelse (forwarding) tabell overflyt: sjekk etter tjener lkker."
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr "feilet f tilgang til %s: %m"
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr "feilet laste %s: %m"
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr "leser %s"
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr "drlig navn i %s"
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr "Ignorerer DHCP leie for %s siden den har en ulovlig domene del"
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr "feilet lage lytte socket: %s"
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "feilet sette IPv6 opsjoner p lytte socket: %s"
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "feilet binde lytte socket for %s: %s"
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr "feilet lytte p socket: %s"
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorerer navnetjener %s - lokal tilknytning"
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorerer navnetjener %s - kan ikke lage/dinde socket: %m"
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr "domene"
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr "ikke kvalifisert"
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr "domener"
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr "benytter lokale adresser kun for %s %s"
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "benytter navnetjener %s#%d for %s %s"
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr "benytter navnetjener %s#%d"
#: dnsmasq.c:
115
#: dnsmasq.c:
93
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:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "feilet finne liste av tilknytninger (interfaces): %s"
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr "ukjent tilknytning (interface) %s"
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr "ingen tilknytning (interface) med adresse %s"
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr "kan ikke pne %s:%s"
#: dnsmasq.c:163
#: dnsmasq.c:141
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr "m sette nyaktig et interface p delagte systemer uten IP_RECVIF"
#: dnsmasq.c:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr "DBus feil: %s"
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus ikke tilgjengelig: sett HAVE_DBUS i src/config.h"
#: dnsmasq.c:292
#: dnsmasq.c:192
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "kan ikke lese %s: %s"
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr "startet, versjon %s mellomlager strrelse %d"
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr "startet, versjon %s mellomlager deaktivert"
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr "kompilerings opsjoner: %s"
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr "DBus sttte aktivert: koblet til system buss"
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr "DBus sttte aktivert: avventer buss tilkobling"
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "setter --bind-interfaces opsjon p grunn av OS begrensninger"
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "advarsel: nettverkskort %s eksisterer ikke for tiden"
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, 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:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, IP omrde %s -- %s, leie tid %s"
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr "DHCP, %s vil bli skrevet hver %s"
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr "kjrer som rot (root)"
#: dnsmasq.c:522
msgid "connected to system DBus"
msgstr "tilkoblet til system DBus"
#: dnsmasq.c:533
#: dnsmasq.c:497
msgid "exiting on receipt of SIGTERM"
msgstr "avslutter etter mottak av SIGTERM"
#: dhcp.c:25
#: dnsmasq.c:524
msgid "connected to system DBus"
msgstr "tilkoblet til system DBus"
#: dhcp.c:32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "kan ikke lage DHCP socket : %s"
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "feilet sette opsjoner p DHCP socket: %s"
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr "feilet sette SO_REUSEADDR p DHCP socket: %s"
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "feilet binde DHCP tjener socket: %s"
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "kan ikke lage ICMP raw socket: %s"
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "kan ikke lage DHCP BPF socket: %s"
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
"kan ikke lage DHCP pakke socket: %s. Er CONFIG_PACKET aktivert i din kjerne?"
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "dubliserte IP adresser i %s dhcp-config direktiv."
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr "Kan ikke benytte RTnetlink socket, faller tilbake til ioctl API"
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr "DHCP krav for ikke stttet maskinvare type (%d) mottatt p %s"
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "DHCP omrde %s -- %s er ikke konsistent med nettmaske %s"
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr "feilet lese %s:%m"
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, c-format
msgid "bad line at %s line %d"
msgstr "drlig linje ved %s linje %d"
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "dubliserte IP adresser i %s (%s) i dhcp-config direktiv"
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr "Ignorerer DHCP verts navn %s p grunn av ulovlig domene del"
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr "kan ikke pne eller lage leie fil: %s"
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr "for mange lagrede leier"
#: lease.c:1
79
#, fuzzy
msgid "failed to write"
msgstr "feilet lese %s:%m"
#: lease.c:1
18
#, fuzzy
, c-format
msgid "failed to write
%s: %m (retry in %ds)
"
msgstr "feilet lese %s:
%m"
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "ingen adresse omrde tilgjengelig for DHCP krav %s %s"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr "med subnet velger"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr "via"
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr "deaktivert"
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr "adresse i bruk"
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr "ingen adresse konfigurert"
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr "ingen adresse tilgjengelig"
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr "ingen leier igjen"
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr "galt nettverk"
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr "deaktiverer DHCP statisk adresse %s"
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr "ukjent leie"
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr "oversett"
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr "gal adresse"
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr "leie ikke funnet"
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr "adresse ikke tilgjengelig"
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr "statisk leie tilgjengelig"
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr "adresse reservert"
#: rfc2131.c:
871
#: rfc2131.c:
946
#, 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:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Mer enn en produsent klasse som passer, bruker %s"
#: netlink.c:41
#, c-format
msgid "cannot
bind
netlink socket: %s"
#,
fuzzy,
c-format
msgid "cannot
create RT
netlink socket: %s"
msgstr "kan ikke binde netlink socket: %s"
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr "forsk p sette en IPv6 tjener adresse via DBus - ingen IPv6 sttte"
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr "setter oppstrms tjener fra DBus"
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr "kunne ikke registrere en DBus meldingshndterer"
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "kan ikke lage DHCP BPF socket: %s"
#: bpf.c:74
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "DHCP krav for ikke stttet maskinvare type (%d) mottatt p %s"
#~ msgid "cannot open %s:%s"
#~ msgstr "kan ikke pne %s:%s"
#~ msgid "DHCP, %s will be written every %s"
#~ msgstr "DHCP, %s vil bli skrevet hver %s"
#~ msgid ""
#~ "cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
#~ "kernel?"
#~ msgstr ""
#~ "kan ikke lage DHCP pakke socket: %s. Er CONFIG_PACKET aktivert i din "
#~ "kjerne?"
#~ msgid "Cannot use RTnetlink socket, falling back to ioctl API"
#~ msgstr "Kan ikke benytte RTnetlink socket, faller tilbake til ioctl API"
po/pl.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2005-10-04 19:17+0100\n"
"Last-Translator: Tomasz Sochaski <nerdhero@gmail.com>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
...
...
@@ -16,31 +16,31 @@ msgstr ""
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr "bd adowania nazw z %s: %m"
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, fuzzy, c-format
msgid "bad address at %s line %d"
msgstr "bdna nazwa w %s, linia %d"
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr "bdna nazwa w %s, linia %d"
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr "przeczytano %s - %d adresw"
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr "wyczyszczono cache"
#: cache.c:72
3
#: cache.c:72
8
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
...
...
@@ -49,26 +49,28 @@ msgstr ""
"nazwa %s nie zostaa nadana dzierawie DHCP %s, poniewa nazwa istnieje w %s "
"i ma adres %s"
#: cache.c:767
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
#: cache.c:772
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
"wielko cache %d, %d/%d wpisw cache uyto ponownie z niewygasych wpisw"
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr "nie mona pobra pamici"
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s w linii %d z %%s"
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr "BD uruchomienia"
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr "nieskoczona"
...
...
@@ -327,6 +329,10 @@ msgstr "W
msgid "Map MAC address (with wildcards) to option set."
msgstr "Mapowanie nazwy dystrybutora DHCP do ustawie opcji."
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr "brakuje \""
...
...
@@ -412,477 +418,500 @@ msgstr "b
msgid "bad MX target"
msgstr "bdny cel MX"
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr "nieprawidowy port"
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr "nieprawidowy zakres dhcp-range"
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr "niespjny zakres DHCP"
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr "bd w dhcp-host"
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr "bd w dhcp-option"
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr "nieprawidowa nazwa domeny w dhcp-option"
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr "zbyt duga nazwa w dhcp-option"
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr "nieprawidowy rekord TX"
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr "zbyt dugi rekord TXT"
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr "bd w rekordzie SRV"
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr "nieprawidowy cel SRV"
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr "nieprawidowy port"
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr "nieprawidowy priorytet"
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr "nieprawidowe znaczenie"
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr "bd"
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr "nieprawidowa opcja linii komend: %s."
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr "nie mona pobra nazwy hosta: %s"
#: option.c:18
82
#: option.c:18
78
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:188
9
#: option.c:188
5
msgid "must have exactly one resolv.conf to read domain from."
msgstr "musisz mie dokadnie jeden plik resolv.conf do odczytu domen."
#: option.c:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr "bd w odczycie %s: %m"
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr "brak wytycznych wyszukiwania w %s"
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serwer nazw %s odmawia wykonania zapytania rekursywnego"
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr ""
"przekroczenie zakresu tablicy przekazywania: sprawd zaptlenie serwera."
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr "bd w dostpie do %s: %m"
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr "bd adowania %s: %m"
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr "czytanie %s"
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr "nieprawidowa nazwa w %s"
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
"Ignoruj dzierawy DHCP dla %s poniewa zawieraj nieprawidow cz "
"domenow"
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr "bd podczas tworzenia gniazda: %s"
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "bd ustawienia opcji IPV6 na nasuchujcym gniedzie: %s"
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "bd podczenia nasuchujcego gniazda dla %s: %s"
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr "bd wczenia nasuchiwania gniazda: %s"
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorowanie serwera nazw %s - interfejs lokalny"
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorowanie serwera nazw %s - nie mona utworzy/dowiza gniazda: %m"
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr "domena"
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr "niekwalifikowany(a/e)"
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr "domeny"
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr "wczenie uywania lokalnych adresw tylko dla %s %s"
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "uywany serwer nazw: %s#%d dla %s %s"
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr "uywany serwer nazw %s#%d"
#: dnsmasq.c:
115
#: dnsmasq.c:
93
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
"Intergracja z ISC dhcpd nie jest dostpna: ustaw HAVE_ISC_READER w src/"
"config.h"
#: dnsmasq.c:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "bd w znalezieniu listy interfejsw sieciowych: %s"
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr "nieznany interfejs %s"
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr "brak interfejsu z adresem %s"
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr "nie mona otworzy %s:%s"
#: dnsmasq.c:163
#: dnsmasq.c:141
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr "musisz ustawi dokadnie jeden interfejs w systemach bez IP_RECVIF"
#: dnsmasq.c:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr "bd DBus: %s"
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus jest niedostpny: ustaw HAVE_DBUS w src/config.h"
#: dnsmasq.c:292
#: dnsmasq.c:192
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "bd odczytu z %s: %s"
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr "uruchomiony, wersja %s wielko cache %d"
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr "uruchomiony, wersja %s cache wyczony"
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr "opcje kompilacji: %s"
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr "obsuga DBus wczona: podczono do szyny systemowej"
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr "obsuga DBus wczona: podczanie do szyny systemowej w toku"
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "ustawiam opcj --bind-interfaces z powodu limitw systemu operacyjnego"
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "ostrzeenie: interfejs %s obecnie nie istnieje"
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP, statyczne dzierawy tylko na %.0s%s, czas dzierawy %s"
#: dnsmasq.c:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, zakres IP %s -- %s, czas dzierawy %s"
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr "DHCP, %s bdzie zapisywane co %s"
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr "pracuje z uprawnieniami uytkownika root"
#: dnsmasq.c:522
msgid "connected to system DBus"
msgstr "poczono do systemowego DBus"
#: dnsmasq.c:533
#: dnsmasq.c:497
msgid "exiting on receipt of SIGTERM"
msgstr "wyczenie po otrzymaniu sygnalu SIGTERM"
#: dhcp.c:25
#: dnsmasq.c:524
msgid "connected to system DBus"
msgstr "poczono do systemowego DBus"
#: dhcp.c:32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "nie mona utworzy gniazda DHCP : %s"
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "bd ustawienia opcji gniazda DHCP: %s"
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr "bd ustawienia SO_REUSEADDR gniazda DHCP: %s"
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "bd podczenia gniazda serwera DHCP: %s"
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "bd utworzenia surowego gniazda ICMP: %s."
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "bd utworzenia gniazda DHCP BPF: %s"
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
"bd utworzenia gniazda pakietw DHCP: %s. Czy w Twoim kernelu uaktywnie "
"opcj CONFIG_PACKET?"
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "powtrzenie adresu IP %s w opcji dhcp-config"
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr "danie DHCP nieobsugiwanego typu sprztowego (%d) otrzymane na %s"
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "zakres DHCP %s -- %s jest niespjny z mask sieciow %s"
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr "bd odczytu %s:%m"
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, fuzzy, c-format
msgid "bad line at %s line %d"
msgstr "bdna nazwa w %s, linia %d"
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "powtrzenie adresu IP %s (%s) w opcji dhcp-config"
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
"Ignoruj nazw hosta DHCP %s, poniewa posiada nieprawidow cz domenow"
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr "bd otwarcia lub utworzenia pliku dzieraw: %s"
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr "zbyt dua ilo zapisanych dzieraw"
#: lease.c:1
79
#, fuzzy
msgid "failed to write"
msgstr "bd
odczytu %s:
%m"
#: lease.c:1
18
#, fuzzy
, c-format
msgid "failed to write
%s: %m (retry in %ds)
"
msgstr "bd
w odczycie %s:
%m"
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr "aden zakres adresowy nie jest dostpny dla adania DHCP %s %s"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr "z selekcj podsieci"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr "przez"
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr "wyczony(a)"
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr "adres w uyciu"
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr "brak skonfigurowanego adresu"
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr "brak dostpnego adresu"
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr "brak wolnych dzieraw"
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr "nieprawidowa sie"
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr "wyczanie statycznego adresu DHCP %s"
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr "nieznana dzierawa"
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr "ignoruj"
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr "bdny adres"
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr "dzierawa nie znaleziona"
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr "adres niedostpny"
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr "dostpna statyczna dzierawa"
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr "adres zarezerwowany"
#: rfc2131.c:
871
#: rfc2131.c:
946
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
#: rfc2131.c:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Wicej ni jeden dystrybutor pasujcy, uywam %s"
#: netlink.c:41
#, c-format
msgid "cannot
bind
netlink socket: %s"
#,
fuzzy,
c-format
msgid "cannot
create RT
netlink socket: %s"
msgstr "nie mona podczy gniazda netlink: %s"
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr "prba ustawienia adresu IPv6 serwera przez DBus - brak obsugi IPv6"
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr ""
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr "nie mona zarejestrowa uchwytu wiadomoci DBus"
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "bd utworzenia gniazda DHCP BPF: %s"
#: bpf.c:74
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "danie DHCP nieobsugiwanego typu sprztowego (%d) otrzymane na %s"
#~ msgid "cannot open %s:%s"
#~ msgstr "nie mona otworzy %s:%s"
#~ msgid "DHCP, %s will be written every %s"
#~ msgstr "DHCP, %s bdzie zapisywane co %s"
#~ msgid ""
#~ "cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
#~ "kernel?"
#~ msgstr ""
#~ "bd utworzenia gniazda pakietw DHCP: %s. Czy w Twoim kernelu "
#~ "uaktywnie opcj CONFIG_PACKET?"
po/pt_BR.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.26\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2006-01-16 20:42+0000\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Portuguese <ldp-br@bazar.conectiva.com.br>\n"
...
...
@@ -15,56 +15,58 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr ""
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, c-format
msgid "bad address at %s line %d"
msgstr ""
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr ""
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr ""
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr ""
#: cache.c:72
3
#: cache.c:72
8
#, 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:7
67
#: cache.c:7
72
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr ""
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr ""
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr ""
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr ""
...
...
@@ -311,6 +313,10 @@ msgstr ""
msgid "Map MAC address (with wildcards) to option set."
msgstr ""
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr ""
...
...
@@ -392,468 +398,481 @@ msgstr ""
msgid "bad MX target"
msgstr ""
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr ""
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr ""
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr ""
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr ""
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr ""
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr ""
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr ""
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr ""
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr ""
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr ""
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr ""
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr ""
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr ""
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr ""
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr ""
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr ""
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr ""
#: option.c:18
82
#: option.c:18
78
msgid "only one resolv.conf file allowed in no-poll mode."
msgstr ""
#: option.c:188
9
#: option.c:188
5
msgid "must have exactly one resolv.conf to read domain from."
msgstr ""
#: option.c:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr ""
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr ""
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr ""
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr ""
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr ""
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr ""
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr ""
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr ""
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr ""
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr ""
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr ""
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr ""
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr ""
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr ""
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr ""
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr ""
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr ""
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr ""
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr ""
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr ""
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr ""
#: dnsmasq.c:
115
#: dnsmasq.c:
93
msgid ""
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
msgstr ""
#: dnsmasq.c:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr ""
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr ""
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr ""
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr ""
#: dnsmasq.c:163
#: dnsmasq.c:141
msgid "must set exactly one interface on broken systems without IP_RECVIF"
msgstr ""
#: dnsmasq.c:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr ""
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr ""
#: dnsmasq.c:292
#: dnsmasq.c:192
#, c-format
msgid "cannot create pipe: %s"
msgstr ""
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr ""
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr ""
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr ""
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr ""
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr ""
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr ""
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr ""
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, c-format
msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr ""
#: dnsmasq.c:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr ""
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr ""
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr ""
#: dnsmasq.c:
522
msgid "
connected to system DBus
"
#: dnsmasq.c:
497
msgid "
exiting on receipt of SIGTERM
"
msgstr ""
#: dnsmasq.c:5
33
msgid "
exiting on receipt of SIGTERM
"
#: dnsmasq.c:5
24
msgid "
connected to system DBus
"
msgstr ""
#: dhcp.c:
25
#: dhcp.c:
32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr ""
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr ""
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr ""
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr ""
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr ""
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr ""
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr ""
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr ""
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr ""
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, c-format
msgid "bad line at %s line %d"
msgstr ""
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr ""
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr ""
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr ""
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr ""
#: lease.c:179
msgid "failed to write"
#: lease.c:118
#, c-format
msgid "failed to write %s: %m (retry in %ds)"
msgstr ""
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, c-format
msgid "no address range available for DHCP request %s %s"
msgstr ""
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr ""
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr ""
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr ""
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr ""
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr ""
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr ""
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr ""
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr ""
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr ""
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr ""
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr ""
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr ""
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr ""
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr ""
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr ""
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr ""
#: rfc2131.c:
871
#: rfc2131.c:
946
#, c-format
msgid "cannot send DHCP option %d: no space left in packet"
msgstr ""
#: rfc2131.c:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr ""
#: netlink.c:41
#, c-format
msgid "cannot bind netlink socket: %s"
msgid "cannot create RTnetlink socket: %s"
msgstr ""
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr ""
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr ""
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr ""
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr ""
#: bpf.c:74
#, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr ""
po/ro.po
View file @
5e9e0efb
...
...
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: dnsmasq 2.24\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-0
3-16 20:04+00
00\n"
"POT-Creation-Date: 2006-0
4-17 11:36+01
00\n"
"PO-Revision-Date: 2005-11-22 16:46+0000\n"
"Last-Translator: Simon Kelley <simon@thekelleys.org.uk>\n"
"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
...
...
@@ -15,31 +15,31 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
# for compatibility purposes the letters â, ă, ş, ţ and î can be written as their look-alike correspondent.
#: cache.c:5
65
#: cache.c:5
70
#, c-format
msgid "failed to load names from %s: %m"
msgstr "încărcarea numelor din %s: %m a eşuat"
#: cache.c:60
1 dhcp.c:7
54
#: cache.c:60
6 dhcp.c:6
54
#, c-format
msgid "bad address at %s line %d"
msgstr "adresă greşită în %s, linia %d"
#: cache.c:6
28 dhcp.c:7
68
#: cache.c:6
33 dhcp.c:6
68
#, c-format
msgid "bad name at %s line %d"
msgstr "nume greşit în %s linia %d"
#: cache.c:63
4 dhcp.c:8
22
#: cache.c:63
9 dhcp.c:7
22
#, c-format
msgid "read %s - %d addresses"
msgstr "citesc %s - %d adrese"
#: cache.c:67
0
#: cache.c:67
5
msgid "cleared cache"
msgstr "memoria temporară a fost ştearsă"
#: cache.c:72
3
#: cache.c:72
8
#, c-format
msgid ""
"not giving name %s to the DHCP lease of %s because the name exists in %s "
...
...
@@ -48,27 +48,29 @@ msgstr ""
"nu pot da numele %s împrumutului de adresă DHCP a lui %s deoarece "
"numeleexistă în %s cu adresa %s"
#: cache.c:767
#, c-format
msgid "cache size %d, %d/%d cache insertions re-used unexpired cache entries."
#: cache.c:772
#, fuzzy, c-format
msgid ""
"time %lu, cache size %d, %d/%d cache insertions re-used unexpired cache "
"entries."
msgstr ""
"cantitate de memorie temporară %d, %d/%d stocări temporare aureutilizat "
"locaţii neexpirate."
#: util.c:1
49 option.c:1302
#: util.c:1
53 option.c:1298
msgid "could not get memory"
msgstr "nu am putut aloca memorie"
#: util.c:17
2
#: util.c:17
6
#, c-format
msgid "%s at line %d of %%s"
msgstr "%s la linia %d din %%s"
#: util.c:1
79
#: util.c:1
83
msgid "FAILED to start up"
msgstr "pornirea A EŞUAT"
#: util.c:30
5
#: util.c:30
4
#, c-format
msgid "infinite"
msgstr "infinit"
...
...
@@ -318,6 +320,10 @@ msgstr "Activează alocarea dinamică a adreselor pentru BOOTP."
msgid "Map MAC address (with wildcards) to option set."
msgstr "Trimite opţiuni DHCP în funcţie de marca plăcii de reţea."
#: option.c:182
msgid "Disable ICMP echo address checking in the DHCP server."
msgstr ""
#: option.c:396
msgid "missing \""
msgstr "lipseşte \""
...
...
@@ -403,476 +409,499 @@ msgstr "nume MX invalid"
msgid "bad MX target"
msgstr "ţintă MX invalidă"
#: option.c:80
5 option.c:816
#: option.c:80
6 option.c:817
msgid "bad port"
msgstr "port invalid"
#: option.c:95
7
#: option.c:95
9
msgid "bad dhcp-range"
msgstr "dhcp-range invalid"
#: option.c:98
6
#: option.c:98
8
msgid "only one netid tag allowed"
msgstr ""
#: option.c:103
1
#: option.c:103
3
msgid "inconsistent DHCP range"
msgstr "domeniu DHCP inconsistent"
#: option.c:121
9
#: option.c:121
8
msgid "bad dhcp-host"
msgstr "dhcp-host invalid"
#: option.c:127
9
#: option.c:127
5
msgid "bad dhcp-option"
msgstr "dhcp-option invalid"
#: option.c:129
7
#: option.c:129
3
msgid "bad domain in dhcp-option"
msgstr "domeniu DNS invalid în declaraţia dhcp-option"
#: option.c:146
7
#: option.c:146
3
msgid "dhcp-option too long"
msgstr "declararea dhcp-option este prea lungă"
#: option.c:166
4
#: option.c:166
0
msgid "bad TXT record"
msgstr "înregistrare TXT invalidă"
#: option.c:169
6
#: option.c:169
2
msgid "TXT record string too long"
msgstr "şirul de caractere pentru înregistrarea TXT este prea lung"
#: option.c:173
5
#: option.c:173
1
msgid "bad SRV record"
msgstr "înregistrare SRV invalidă"
#: option.c:174
8
#: option.c:174
4
msgid "bad SRV target"
msgstr "ţintă SRV invalidă"
#: option.c:17
60
#: option.c:17
56
msgid "invalid port number"
msgstr "număr de port invalid"
#: option.c:17
71
#: option.c:17
67
msgid "invalid priority"
msgstr "prioritate invalidă"
#: option.c:17
82
#: option.c:17
78
msgid "invalid weight"
msgstr "pondere invalidă"
#: option.c:180
7
#: option.c:180
3
msgid "error"
msgstr "eroare"
#: option.c:180
9
#: option.c:180
5
#, c-format
msgid "bad command line options: %s."
msgstr "opţiuni în linie de comandă invalide: %s."
#: option.c:1853
#: option.c:1807
msgid "try --help"
msgstr ""
#: option.c:1809
msgid "try -w"
msgstr ""
#: option.c:1849
#, c-format
msgid "cannot get host-name: %s"
msgstr "nu pot citi numele maşinii: %s"
#: option.c:18
82
#: option.c:18
78
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:188
9
#: option.c:188
5
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:18
92 network.c:591
#: option.c:18
88 network.c:513
#, c-format
msgid "failed to read %s: %m"
msgstr "nu pot citi %s: %n"
#: option.c:19
10
#: option.c:19
06
#, c-format
msgid "no search directive found in %s"
msgstr "nu s-a găsit nici un criteriu de căutare în %s"
#: forward.c:38
3
#: forward.c:38
1
#, c-format
msgid "nameserver %s refused to do a recursive query"
msgstr "serverul DNS %s refuză interogările recursive"
#: forward.c:
914
#: forward.c:
888
msgid "forwarding table overflow: check for server loops."
msgstr "depăşire de memorie în tabela cu înaintări DNS: verificaţi de bucle."
#: isc.c:7
1 dnsmasq.c:482
#: isc.c:7
3 dnsmasq.c:446
#, c-format
msgid "failed to access %s: %m"
msgstr "accesarea serverului %s a eşuat: %n"
#: isc.c:8
7
#: isc.c:8
9
#, c-format
msgid "failed to load %s: %m"
msgstr "nu pot încărca %s: %n"
#: isc.c:9
1 network.c:595
#: isc.c:9
3 network.c:517
#, c-format
msgid "reading %s"
msgstr "citesc %s"
#: isc.c:11
3
#: isc.c:11
5
#, c-format
msgid "bad name in %s"
msgstr "nume invalid în %s"
#: isc.c:17
5
#: isc.c:17
7
#, c-format
msgid "Ignoring DHCP lease for %s because it has an illegal domain part"
msgstr "Împrumutul DHCP pentru %s va fi ignorat deoarece are domeniu invalid"
#: network.c:
418
#: network.c:
340
#, c-format
msgid "failed to create listening socket: %s"
msgstr "creearea socket-ului de ascultare a eşuat: %s"
#: network.c:
425
#: network.c:
347
#, c-format
msgid "failed to set IPV6 options on listening socket: %s"
msgstr "configurarea opţiunilor IPv6 a eşuat pe socket-ul de ascultare: %s"
#: network.c:
444
#: network.c:
365
#, c-format
msgid "failed to bind listening socket for %s: %s"
msgstr "activarea socket-ului de ascultare pentru %s a eşuat: %s"
#: network.c:
451
#: network.c:
373
#, c-format
msgid "failed to listen on socket: %s"
msgstr "ascultarea pe socket a eşuat: %s"
#: network.c:
521
#: network.c:
443
#, c-format
msgid "ignoring nameserver %s - local interface"
msgstr "ignorăm serverul DNS %s - interfaţă locală"
#: network.c:
530
#: network.c:
452
#, c-format
msgid "ignoring nameserver %s - cannot make/bind socket: %m"
msgstr "ignorăm serverul DNS %s - nu pot creea/activa socket-ul: %s"
#: network.c:
544
#: network.c:
466
msgid "domain"
msgstr "domeniu"
#: network.c:
546
#: network.c:
468
msgid "unqualified"
msgstr "invalid"
#: network.c:
546
#: network.c:
468
msgid "domains"
msgstr "domenii"
#: network.c:
549
#: network.c:
471
#, c-format
msgid "using local addresses only for %s %s"
msgstr "folosim adresele locale doar pentru %S %s"
#: network.c:
551
#: network.c:
473
#, c-format
msgid "using nameserver %s#%d for %s %s"
msgstr "folosim serverul DNS %s#%d pentru %s %s"
#: network.c:
554
#: network.c:
476
#, c-format
msgid "using nameserver %s#%d"
msgstr "folosim serverul DNS %s#%d"
#: dnsmasq.c:
115
#: dnsmasq.c:
93
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:1
19
#: dnsmasq.c:1
02
#, c-format
msgid "failed to find list of interfaces: %s"
msgstr "enumerarea interfeţelor a eşuat: %s"
#: dnsmasq.c:1
34
#: dnsmasq.c:1
17
#, c-format
msgid "unknown interface %s"
msgstr "interfaţă necunoscută %s"
#: dnsmasq.c:1
40
#: dnsmasq.c:1
23
#, c-format
msgid "no interface with address %s"
msgstr "nu exista interfaţă pentru adresa %s"
#: dnsmasq.c:149
#, c-format
msgid "cannot open %s:%s"
msgstr "nu pot deschide %s:%s"
#: dnsmasq.c:163
#: dnsmasq.c:141
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:1
76 dnsmasq.c:520
#: dnsmasq.c:1
54 dnsmasq.c:522
#, c-format
msgid "DBus error: %s"
msgstr "eroare DBus: %s"
#: dnsmasq.c:1
79
#: dnsmasq.c:1
57
msgid "DBus not available: set HAVE_DBUS in src/config.h"
msgstr "DBus nu este disponibil: puneţi HAVE_DBUS in src/config.h"
#: dnsmasq.c:292
#: dnsmasq.c:192
#, fuzzy, c-format
msgid "cannot create pipe: %s"
msgstr "nu pot citi %s: %s"
#: dnsmasq.c:225
#, c-format
msgid "Cannot set capabilities: %s"
msgstr ""
#: dnsmasq.c:324
#, c-format
msgid "started, version %s cachesize %d"
msgstr "am ponit, versiunea %s memorie temporară %d"
#: dnsmasq.c:
294
#: dnsmasq.c:
326
#, c-format
msgid "started, version %s cache disabled"
msgstr "am pornit, versiunea %s memorie temporară dezactivată"
#: dnsmasq.c:
296
#: dnsmasq.c:
328
#, c-format
msgid "compile time options: %s"
msgstr "compilat cu opţiunile: %s"
#: dnsmasq.c:3
02
#: dnsmasq.c:3
34
msgid "DBus support enabled: connected to system bus"
msgstr "suportul DBus activ: sunt conectat la magistrala sistem"
#: dnsmasq.c:3
04
#: dnsmasq.c:3
36
msgid "DBus support enabled: bus connection pending"
msgstr "suportul DBus activ: aştept conexiunea la magistrală"
#: dnsmasq.c:3
09
#: dnsmasq.c:3
41
msgid "setting --bind-interfaces option because of OS limitations"
msgstr "specific opţiunea --bind-interfaces din cauza limitărilor SO"
#: dnsmasq.c:3
14
#: dnsmasq.c:3
46
#, c-format
msgid "warning: interface %s does not currently exist"
msgstr "atenţie: interfaţa %s nu există momentan"
#: dnsmasq.c:3
31
#: dnsmasq.c:3
58
#, 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:3
32
#: dnsmasq.c:3
59
#, c-format
msgid "DHCP, IP range %s -- %s, lease time %s"
msgstr "DHCP, domeniu IP %s -- %s, timpul reînoirii %s"
#: dnsmasq.c:343
#, c-format
msgid "DHCP, %s will be written every %s"
msgstr "DHCP, %s va fi rescris odată la fiecare %s"
#: dnsmasq.c:348
#: dnsmasq.c:365
msgid "running as root"
msgstr "rulez ca root"
#: dnsmasq.c:522
msgid "connected to system DBus"
msgstr "magistrala sistem Dbus conectată"
#: dnsmasq.c:533
#: dnsmasq.c:497
msgid "exiting on receipt of SIGTERM"
msgstr "am primit SIGTERM, am terminat"
#: dhcp.c:25
#: dnsmasq.c:524
msgid "connected to system DBus"
msgstr "magistrala sistem Dbus conectată"
#: dhcp.c:32
#, c-format
msgid "cannot create DHCP socket : %s"
msgstr "nu pot creea socket DHCP : %s"
#: dhcp.c:
35
#: dhcp.c:
42
#, c-format
msgid "failed to set options on DHCP socket: %s"
msgstr "configurarea opţiunilor socketului DHCP a eşuat: %s"
#: dhcp.c:4
2
#: dhcp.c:4
9
#, c-format
msgid "failed to set SO_REUSEADDR on DHCP socket: %s"
msgstr "configurarea SO_REUSEADDR pe socket-ul DHCP a eşuat: %s"
#: dhcp.c:5
2
#: dhcp.c:5
9
#, c-format
msgid "failed to bind DHCP server socket: %s"
msgstr "activarea socket-ului server-ului DHCP a eşuat: %s"
#: dhcp.c:
61
#: dhcp.c:
72
#, c-format
msgid "cannot create ICMP raw socket: %s."
msgstr "nu pot creea socket ICMP raw: %s."
#: dhcp.c:75
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "nu pot creea socket DHCP BPF: %s"
#: dhcp.c:86
#, c-format
msgid ""
"cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
"kernel?"
msgstr ""
"nu pot creea socket DHCP packet: %s. Aveţi activată în nucleulsistemului "
"opţiunea CONFIG_PACKET ?"
#: dhcp.c:98
#: dhcp.c:84
#, c-format
msgid "duplicate IP address %s in dhcp-config directive."
msgstr "adresă IP duplicat %s în declaraţia dhcp-config."
#: dhcp.c:234
msgid "Cannot use RTnetlink socket, falling back to ioctl API"
msgstr ""
#: dhcp.c:345
#, c-format
msgid "DHCP request for unsupported hardware type (%d) recieved on %s"
msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepţionată prin %s"
#: dhcp.c:413
#: dhcp.c:306
#, c-format
msgid "DHCP range %s -- %s is not consistent with netmask %s"
msgstr "domeniu DHCP %s -- %s nu este consistent cu masca de reţea %s"
#: dhcp.c:
7
22
#: dhcp.c:
6
22
#, c-format
msgid "failed to read %s:%m"
msgstr "citirea %s:%n a eşuat"
#: dhcp.c:
7
41
#: dhcp.c:
6
41
#, c-format
msgid "bad line at %s line %d"
msgstr "linie invalidă în %s rândul %d"
#: dhcp.c:
8
45
#: dhcp.c:
7
45
#, c-format
msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresă IP duplicat %s (%s) în declaraţia dhcp-config."
#: dhcp.c:
8
81
#: dhcp.c:
7
81
#, c-format
msgid "Ignoring DHCP host name %s because it has an illegal domain part"
msgstr "Ignor numele DHCP al maşinii %s deoarece are domeniu DNS ilegal"
#: lease.c:3
8
#: lease.c:3
4
#, c-format
msgid "cannot open or create leases file: %s"
msgstr "nu pot creea sau deschide fişierul cu împrumuturi: %s"
#: lease.c:
80
#: lease.c:
71
msgid "too many stored leases"
msgstr "prea multe împrumuturi stocate"
#: lease.c:1
79
#, fuzzy
msgid "failed to write"
msgstr "
citirea %s:%n a eşuat
"
#: lease.c:1
18
#, fuzzy
, c-format
msgid "failed to write
%s: %m (retry in %ds)
"
msgstr "
nu pot citi %s: %n
"
#: rfc2131.c:2
18
#: rfc2131.c:2
47
#, 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:2
19
#: rfc2131.c:2
48
msgid "with subnet selector"
msgstr "cu selectorul de subreţea"
#: rfc2131.c:2
19
#: rfc2131.c:2
48
msgid "via"
msgstr "prin"
#: rfc2131.c:2
40 rfc2131.c:264
#: rfc2131.c:2
74 rfc2131.c:298
msgid "disabled"
msgstr "dezactivat"
#: rfc2131.c:
275 rfc2131.c:674
#: rfc2131.c:
310 rfc2131.c:731
msgid "address in use"
msgstr "adresa este folosită"
#: rfc2131.c:
278
#: rfc2131.c:
313
msgid "no address configured"
msgstr "adresă lipsă"
#: rfc2131.c:
291 rfc2131.c:546
#: rfc2131.c:
326 rfc2131.c:605
msgid "no address available"
msgstr "nici o adresă disponibilă"
#: rfc2131.c:
298 rfc2131.c:677
#: rfc2131.c:
333 rfc2131.c:734
msgid "no leases left"
msgstr "nu mai am de unde să împrumut"
#: rfc2131.c:3
01 rfc2131.c:650
#: rfc2131.c:3
36 rfc2131.c:707
msgid "wrong network"
msgstr "reţea greşită"
#: rfc2131.c:5
05
#: rfc2131.c:5
40
#, c-format
msgid "disabling DHCP static address %s"
msgstr "dezactivăm adresele DHCP statice %s"
#: rfc2131.c:5
23
#: rfc2131.c:5
58
msgid "unknown lease"
msgstr "împrumut necunoscut"
#: rfc2131.c:5
36 rfc2131.c:74
9
#: rfc2131.c:5
67 rfc2131.c:79
9
msgid "ignored"
msgstr "ignorat"
#: rfc2131.c:619
#: rfc2131.c:581
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr ""
#: rfc2131.c:590
#, c-format
msgid "not using configured address %s because it is in use by the server"
msgstr ""
#: rfc2131.c:670
msgid "wrong address"
msgstr "adresă greşită"
#: rfc2131.c:6
32
#: rfc2131.c:6
83
msgid "lease not found"
msgstr "împrumutul nu a fost găsit"
#: rfc2131.c:
658
#: rfc2131.c:
715
msgid "address not available"
msgstr "adresă indisponibilă"
#: rfc2131.c:
667
#: rfc2131.c:
724
msgid "static lease available"
msgstr "împrumut static este disponibil"
#: rfc2131.c:
671
#: rfc2131.c:
728
msgid "address reserved"
msgstr "adresă rezervată"
#: rfc2131.c:
871
#: rfc2131.c:
946
#, 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:1
174
#: rfc2131.c:1
247
#, c-format
msgid "More than one vendor class matches, using %s"
msgstr "Se potrivesc mai multe clase de mărci de interfeţe, folosim %s"
#: netlink.c:41
#, c-format
msgid "cannot
bind
netlink socket: %s"
#,
fuzzy,
c-format
msgid "cannot
create RT
netlink socket: %s"
msgstr "nu pot să activez socket-ul netlink: %s"
#: netlink.c:208
#, c-format
msgid "RTnetlink returns error: %s"
msgstr ""
#: dbus.c:112
msgid "attempt to set an IPv6 server address via DBus - no IPv6 support"
msgstr "incerc să configurez un server IPv6 prin Dbus - nu este suport IPv6"
#: dbus.c:23
7
#: dbus.c:23
8
msgid "setting upstream servers from DBus"
msgstr "configurăm serverele superioare prin Dbus"
#: dbus.c:27
3
#: dbus.c:27
4
msgid "could not register a DBus message handler"
msgstr "nu pot activa o interfaţă de mesaje DBus"
#: bpf.c:54
#, c-format
msgid "cannot create DHCP BPF socket: %s"
msgstr "nu pot creea socket DHCP BPF: %s"
#: bpf.c:74
#, fuzzy, c-format
msgid "DHCP request for unsupported hardware type (%d) received on %s"
msgstr "cerere DHCP pentru dispozitiv nesuportat (%d) recepţionată prin %s"
#~ msgid "cannot open %s:%s"
#~ msgstr "nu pot deschide %s:%s"
#~ msgid "DHCP, %s will be written every %s"
#~ msgstr "DHCP, %s va fi rescris odată la fiecare %s"
#~ msgid ""
#~ "cannot create DHCP packet socket: %s. Is CONFIG_PACKET enabled in your "
#~ "kernel?"
#~ msgstr ""
#~ "nu pot creea socket DHCP packet: %s. Aveţi activată în nucleulsistemului "
#~ "opţiunea CONFIG_PACKET ?"
rpm/dnsmasq-SuSE.patch
View file @
5e9e0efb
...
...
@@ -20,13 +20,4 @@
#define IP6INTERFACES "/proc/net/if_inet6"
#define UPTIME "/proc/uptime"
#define DHCP_SERVER_PORT 67
@@ -195,8 +195,8 @@
/* platform independent options. */
#undef HAVE_BROKEN_RTC
-#define HAVE_ISC_READER
+#undef HAVE_ISC_READER
#undef HAVE_DBUS
#if defined(HAVE_BROKEN_RTC) && defined(HAVE_ISC_READER)
# error HAVE_ISC_READER is not compatible with HAVE_BROKEN_RTC
src/bpf.c
0 → 100644
View file @
5e9e0efb
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 dated June, 1991.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#include "dnsmasq.h"
#ifndef HAVE_LINUX_NETWORK
#include <net/bpf.h>
static
struct
iovec
ifconf
=
{
.
iov_base
=
NULL
,
.
iov_len
=
0
};
static
struct
iovec
ifreq
=
{
.
iov_base
=
NULL
,
.
iov_len
=
0
};
struct
header
{
struct
ether_header
ether
;
struct
ip
ip
;
struct
udphdr
{
u16
uh_sport
;
/* source port */
u16
uh_dport
;
/* destination port */
u16
uh_ulen
;
/* udp length */
u16
uh_sum
;
/* udp checksum */
}
udp
;
};
void
init_bpf
(
struct
daemon
*
daemon
)
{
int
i
=
0
;
while
(
1
)
{
/* useful size which happens to be sufficient */
if
(
expand_buf
(
&
ifreq
,
sizeof
(
struct
ifreq
)))
{
sprintf
(
ifreq
.
iov_base
,
"/dev/bpf%d"
,
i
++
);
if
((
daemon
->
dhcp_raw_fd
=
open
(
ifreq
.
iov_base
,
O_RDWR
,
0
))
!=
-
1
)
return
;
}
if
(
errno
!=
EBUSY
)
die
(
_
(
"cannot create DHCP BPF socket: %s"
),
NULL
);
}
}
void
send_via_bpf
(
struct
daemon
*
daemon
,
struct
dhcp_packet
*
mess
,
size_t
len
,
struct
in_addr
iface_addr
,
struct
ifreq
*
ifr
)
{
/* Hairy stuff, packet either has to go to the
net broadcast or the destination can't reply to ARP yet,
but we do know the physical address.
Build the packet by steam, and send directly, bypassing
the kernel IP stack */
struct
header
header
;
u32
i
,
sum
;
struct
iovec
iov
[
2
];
/* Only know how to do ethernet on *BSD */
if
(
mess
->
htype
!=
ARPHRD_ETHER
||
mess
->
hlen
!=
ETHER_ADDR_LEN
)
{
syslog
(
LOG_WARNING
,
_
(
"DHCP request for unsupported hardware type (%d) received on %s"
),
mess
->
htype
,
ifr
->
ifr_name
);
return
;
}
ifr
->
ifr_addr
.
sa_family
=
AF_LINK
;
if
(
ioctl
(
daemon
->
dhcpfd
,
SIOCGIFADDR
,
ifr
)
<
0
)
return
;
memcpy
(
header
.
ether
.
ether_shost
,
LLADDR
((
struct
sockaddr_dl
*
)
&
ifr
->
ifr_addr
),
ETHER_ADDR_LEN
);
header
.
ether
.
ether_type
=
htons
(
ETHERTYPE_IP
);
if
(
ntohs
(
mess
->
flags
)
&
0x8000
)
{
memset
(
header
.
ether
.
ether_dhost
,
255
,
ETHER_ADDR_LEN
);
header
.
ip
.
ip_dst
.
s_addr
=
INADDR_BROADCAST
;
}
else
{
memcpy
(
header
.
ether
.
ether_dhost
,
mess
->
chaddr
,
ETHER_ADDR_LEN
);
header
.
ip
.
ip_dst
.
s_addr
=
mess
->
yiaddr
.
s_addr
;
}
header
.
ip
.
ip_p
=
IPPROTO_UDP
;
header
.
ip
.
ip_src
.
s_addr
=
iface_addr
.
s_addr
;
header
.
ip
.
ip_len
=
htons
(
sizeof
(
struct
ip
)
+
sizeof
(
struct
udphdr
)
+
len
)
;
header
.
ip
.
ip_hl
=
sizeof
(
struct
ip
)
/
4
;
header
.
ip
.
ip_v
=
IPVERSION
;
header
.
ip
.
ip_tos
=
0
;
header
.
ip
.
ip_id
=
htons
(
0
);
header
.
ip
.
ip_off
=
htons
(
0x4000
);
/* don't fragment */
header
.
ip
.
ip_ttl
=
IPDEFTTL
;
header
.
ip
.
ip_sum
=
0
;
for
(
sum
=
0
,
i
=
0
;
i
<
sizeof
(
struct
ip
)
/
2
;
i
++
)
sum
+=
((
u16
*
)
&
header
.
ip
)[
i
];
while
(
sum
>>
16
)
sum
=
(
sum
&
0xffff
)
+
(
sum
>>
16
);
header
.
ip
.
ip_sum
=
(
sum
==
0xffff
)
?
sum
:
~
sum
;
header
.
udp
.
uh_sport
=
htons
(
DHCP_SERVER_PORT
);
header
.
udp
.
uh_dport
=
htons
(
DHCP_CLIENT_PORT
);
if
(
len
&
1
)
((
char
*
)
mess
)[
len
]
=
0
;
/* for checksum, in case length is odd. */
header
.
udp
.
uh_sum
=
0
;
header
.
udp
.
uh_ulen
=
sum
=
htons
(
sizeof
(
struct
udphdr
)
+
len
);
sum
+=
htons
(
IPPROTO_UDP
);
for
(
i
=
0
;
i
<
4
;
i
++
)
sum
+=
((
u16
*
)
&
header
.
ip
.
ip_src
)[
i
];
for
(
i
=
0
;
i
<
sizeof
(
struct
udphdr
)
/
2
;
i
++
)
sum
+=
((
u16
*
)
&
header
.
udp
)[
i
];
for
(
i
=
0
;
i
<
(
len
+
1
)
/
2
;
i
++
)
sum
+=
((
u16
*
)
mess
)[
i
];
while
(
sum
>>
16
)
sum
=
(
sum
&
0xffff
)
+
(
sum
>>
16
);
header
.
udp
.
uh_sum
=
(
sum
==
0xffff
)
?
sum
:
~
sum
;
ioctl
(
daemon
->
dhcp_raw_fd
,
BIOCSETIF
,
ifr
);
iov
[
0
].
iov_base
=
&
header
;
iov
[
0
].
iov_len
=
sizeof
(
struct
header
);
iov
[
1
].
iov_base
=
mess
;
iov
[
1
].
iov_len
=
len
;
while
(
writev
(
daemon
->
dhcp_raw_fd
,
iov
,
2
)
==
-
1
&&
retry_send
());
}
int
iface_enumerate
(
struct
daemon
*
daemon
,
void
*
parm
,
int
(
*
ipv4_callback
)(),
int
(
*
ipv6_callback
)())
{
char
*
ptr
;
struct
ifreq
*
ifr
,
ifaux
;
struct
ifconf
ifc
;
int
fd
,
errsav
,
ret
=
0
;
int
lastlen
=
0
;
size_t
len
;
if
((
fd
=
socket
(
PF_INET
,
SOCK_DGRAM
,
0
))
==
-
1
)
return
0
;
for
(
len
=
0
;
;
len
+=
10
*
sizeof
(
struct
ifreq
))
{
if
(
!
expand_buf
(
&
ifconf
,
len
))
goto
err
;
ifc
.
ifc_len
=
len
;
ifc
.
ifc_buf
=
ifconf
.
iov_base
;
if
(
ioctl
(
fd
,
SIOCGIFCONF
,
&
ifc
)
==
-
1
)
{
if
(
errno
!=
EINVAL
||
lastlen
!=
0
)
goto
err
;
}
else
{
if
(
ifc
.
ifc_len
==
lastlen
)
break
;
/* got a big enough buffer now */
lastlen
=
ifc
.
ifc_len
;
}
}
for
(
ptr
=
ifc
.
ifc_buf
;
ptr
<
ifc
.
ifc_buf
+
ifc
.
ifc_len
;
ptr
+=
len
)
{
/* subsequent entries may not be aligned, so copy into
an aligned buffer to avoid nasty complaints about
unaligned accesses. */
#ifdef HAVE_SOCKADDR_SA_LEN
len
=
((
struct
ifreq
*
)
ptr
)
->
ifr_addr
.
sa_len
+
IF_NAMESIZE
;
#else
len
=
sizeof
(
struct
ifreq
);
#endif
if
(
!
expand_buf
(
&
ifreq
,
len
))
goto
err
;
ifr
=
ifreq
.
iov_base
;
memcpy
(
ifr
,
ptr
,
len
);
strncpy
(
ifaux
.
ifr_name
,
ifr
->
ifr_name
,
IF_NAMESIZE
);
if
(
ifr
->
ifr_addr
.
sa_family
==
AF_INET
&&
ipv4_callback
)
{
struct
in_addr
addr
,
netmask
,
broadcast
;
if
(
ioctl
(
fd
,
SIOCGIFINDEX
,
&
ifaux
)
==
-
1
)
continue
;
broadcast
.
s_addr
=
0
;
addr
=
((
struct
sockaddr_in
*
)
&
ifr
->
ifr_addr
)
->
sin_addr
;
if
(
ioctl
(
fd
,
SIOCGIFNETMASK
,
ifr
)
==
-
1
)
continue
;
netmask
=
((
struct
sockaddr_in
*
)
&
ifr
->
ifr_addr
)
->
sin_addr
;
if
(
ioctl
(
fd
,
SIOCGIFBRDADDR
,
ifr
)
!=
-
1
)
broadcast
=
((
struct
sockaddr_in
*
)
&
ifr
->
ifr_addr
)
->
sin_addr
;
if
(
!
((
*
ipv4_callback
)(
daemon
,
addr
,
(
int
)
ifaux
.
ifr_index
,
netmask
,
broadcast
,
parm
)))
goto
err
;
}
#ifdef HAVE_IPV6
else
if
(
ifr
->
ifr_addr
.
sa_family
==
AF_INET6
&&
ipv6_callback
)
{
struct
in6_addr
*
addr
=
&
((
struct
sockaddr_in6
*
)
&
ifr
->
ifr_addr
)
->
sin6_addr
;
/* voodoo to clear interface field in address */
if
(
!
(
daemon
->
options
&
OPT_NOWILD
)
&&
IN6_IS_ADDR_LINKLOCAL
(
addr
))
{
addr
->
s6_addr
[
2
]
=
0
;
addr
->
s6_addr
[
3
]
=
0
;
}
if
(
ioctl
(
fd
,
SIOCGIFINDEX
,
&
ifaux
)
==
-
1
)
continue
;
if
(
!
((
*
ipv6_callback
)(
daemon
,
addr
,
(
int
)((
struct
sockaddr_in6
*
)
&
ifr
->
ifr_addr
)
->
sin6_scope_id
,
(
int
)
ifaux
.
ifr_index
,
parm
)))
goto
err
;
}
#endif
}
ret
=
1
;
err:
errsav
=
errno
;
close
(
fd
);
errno
=
errsav
;
return
ret
;
}
#endif
src/cache.c
View file @
5e9e0efb
...
...
@@ -18,6 +18,7 @@ static int cache_inserted, cache_live_freed, insert_error;
static
union
bigname
*
big_free
;
static
int
bignames_left
,
log_queries
,
cache_size
,
hash_size
;
static
int
uid
;
static
char
*
addrbuff
;
static
void
cache_free
(
struct
crec
*
crecp
);
static
void
cache_unlink
(
struct
crec
*
crecp
);
...
...
@@ -29,7 +30,11 @@ void cache_init(int size, int logq)
struct
crec
*
crecp
;
int
i
;
log_queries
=
logq
;
if
((
log_queries
=
logq
))
addrbuff
=
safe_malloc
(
ADDRSTRLEN
);
else
addrbuff
=
NULL
;
cache_head
=
cache_tail
=
NULL
;
dhcp_inuse
=
dhcp_spare
=
NULL
;
new_chain
=
NULL
;
...
...
@@ -762,17 +767,17 @@ void cache_add_dhcp_entry(struct daemon *daemon, char *host_name,
void
dump_cache
(
struct
daemon
*
daemon
)
void
dump_cache
(
struct
daemon
*
daemon
,
time_t
now
)
{
syslog
(
LOG_INFO
,
_
(
"cache size %d, %d/%d cache insertions re-used unexpired cache entries."
),
daemon
->
cachesize
,
cache_live_freed
,
cache_inserted
);
syslog
(
LOG_INFO
,
_
(
"
time %lu,
cache size %d, %d/%d cache insertions re-used unexpired cache entries."
),
(
unsigned
long
)
now
,
daemon
->
cachesize
,
cache_live_freed
,
cache_inserted
);
if
(
daemon
->
options
&
(
OPT_DEBUG
|
OPT_LOG
))
if
((
daemon
->
options
&
(
OPT_DEBUG
|
OPT_LOG
))
&&
(
addrbuff
||
(
addrbuff
=
malloc
(
ADDRSTRLEN
))))
{
struct
crec
*
cache
;
char
addrbuff
[
ADDRSTRLEN
];
int
i
;
syslog
(
LOG_DEBUG
,
"Host Address Flags Expires
\n
"
);
syslog
(
LOG_DEBUG
,
"Host Address Flags Expires"
);
for
(
i
=
0
;
i
<
hash_size
;
i
++
)
for
(
cache
=
hash_table
[
i
];
cache
;
cache
=
cache
->
hash_next
)
...
...
@@ -797,7 +802,7 @@ void dump_cache(struct daemon *daemon)
#endif
syslog
(
LOG_DEBUG
,
#ifdef HAVE_BROKEN_RTC
"%-40.40s %-30.30s %s%s%s%s%s%s%s%s%s%s %l
d
\n
"
,
"%-40.40s %-30.30s %s%s%s%s%s%s%s%s%s%s %l
u
"
,
#else
"%-40.40s %-30.30s %s%s%s%s%s%s%s%s%s%s %s"
,
#endif
...
...
@@ -813,7 +818,7 @@ void dump_cache(struct daemon *daemon)
cache
->
flags
&
F_NXDOMAIN
?
"X"
:
" "
,
cache
->
flags
&
F_HOSTS
?
"H"
:
" "
,
#ifdef HAVE_BROKEN_RTC
cache
->
flags
&
F_IMMORTAL
?
0
:
(
unsigned
long
)
cache
->
ttd
cache
->
flags
&
F_IMMORTAL
?
0
:
(
unsigned
long
)
(
cache
->
ttd
-
now
)
#else
cache
->
flags
&
F_IMMORTAL
?
"
\n
"
:
ctime
(
&
(
cache
->
ttd
))
#endif
...
...
@@ -844,7 +849,6 @@ void log_query(unsigned short flags, char *name, struct all_addr *addr,
char
*
source
;
char
*
verb
=
"is"
;
char
types
[
20
];
char
addrbuff
[
ADDRSTRLEN
];
if
(
!
log_queries
)
return
;
...
...
src/config.h
View file @
5e9e0efb
...
...
@@ -10,9 +10,7 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#define VERSION "2.27"
#define VERSION "2.28"
#define FTABSIZ 150
/* max number of outstanding requests */
#define MAX_PROCS 20
/* max no children for TCP requests */
...
...
@@ -22,8 +20,10 @@
#define LEASE_RETRY 60
/* on error, retry writing leasefile after LEASE_RETRY seconds */
#define LOGRATE 120
/* log table overflows every LOGRATE seconds */
#define CACHESIZ 150
/* default cache size */
#define MAXTOK 50
/* token in DHCP leases */
#define MAXLEASES 150
/* maximum number of DHCP leases */
#define PING_WAIT 3
/* wait for ping address-in-use test */
#define PING_CACHE_TIME 30
/* Ping test assumed to be valid this long. */
#define DHCP_PACKET_MAX 16384
/* hard limit on DHCP packet size */
#define SMALLDNAME 40
/* most domain names are smaller than this */
#define HOSTSFILE "/etc/hosts"
#define ETHERSFILE "/etc/ethers"
...
...
@@ -46,8 +46,6 @@
#define DEFLEASE 3600
/* default lease time, 1 hour */
#define CHUSER "nobody"
#define CHGRP "dip"
#define IP6INTERFACES "/proc/net/if_inet6"
#define UPTIME "/proc/uptime"
#define DHCP_SERVER_PORT 67
#define DHCP_CLIENT_PORT 68
...
...
@@ -89,26 +87,25 @@
new system, you may want to edit these.
May replace this with Autoconf one day.
HAVE_LINUX_IPV6_PROC
define this to do IPv6 interface discovery using
proc/net/if_inet6 ala LINUX.
HAVE_LINUX_NETWORK
define this to do networking the Linux way. When it's defined, the code will
use IP_PKTINFO, Linux capabilities and the RTnetlink system. If it's not defined,
a few facilities will be lost, namely support for multiple addresses on an interface,
DNS query retransmission, and (on some systems) wildcard interface binding.
HAVE_BROKEN_RTC
define this on embeded systems which don't have an RTC
which keeps time over reboots. Causes dnsmasq to use uptime
()
for timing, and keep
relative time values in its leases file.
Also enables "Flash disk mode". Normally, dnsmasq tries very hard to
keep the on-disk leases file up-to-date: rewriting it after every change.
When HAVE_BROKEN_RTC is in effect, a different regime is used:
The leases file is written when dnsmasq terminates, when it receives
SIGALRM, when a brand new lease is allocated, or every n seconds,
where n is one third of the smallest time configured for leases
i
n a --dhcp-range or --dhcp-host option
.
define this on embed
d
ed systems which don't have an RTC
which keeps time over reboots. Causes dnsmasq to use uptime
for timing, and keep
lease lengths rather than expiry times
in its leases file. This also make dnsmasq "flash disk friendly".
Normally, dnsmasq tries very hard to keep the on-disk leases file
up-to-date: rewriting it after every renewal. When HAVE_BROKEN_RTC
is in effect, the lease file is only written when a new lease is
created, or an old one destroyed. (Because those are the only times
it changes.) This vastly reduces the number of file writes, and makes
i
t viable to keep the lease file on a flash filesystem
.
NOTE: when enabling or disabling this, be sure to delete any old
leases file, otherwise dnsmasq may get very confused.
This configuration currently only works on Linux, but could be made to
work on other systems by teaching dnsmasq_time() in utils.c how to
read the system uptime.
HAVE_ISC_READER
define this to include the old ISC dhcpcd integration. Note that you cannot
...
...
@@ -137,18 +134,6 @@ HAVE_DEV_URANDOM
HAVE_SOCKADDR_SA_LEN
define this if struct sockaddr has sa_len field (*BSD)
HAVE_PSELECT
If your C library implements pselect, define this.
HAVE_BPF
If your OS implements Berkeley Packet filter, define this.
HAVE_RTNETLINK
If your OS has the Linux Routing netlink socket API and suitable
C library headers, define this. Note that the code will fall
back to the Berkley API at runtime if netlink support is not
configured into the kernel.
HAVE_DBUS
Define this if you want to link against libdbus, and have dnsmasq
define some methods to allow (re)configuration of the upstream DNS
...
...
@@ -156,12 +141,11 @@ HAVE_DBUS
NOTES:
For Linux you should define
HAVE_LINUX_
IPV6_PROC
HAVE_LINUX_
NETWORK
HAVE_GETOPT_LONG
HAVE_RANDOM
HAVE_DEV_RANDOM
HAVE_DEV_URANDOM
HAVE_RTNETLINK
you should NOT define
HAVE_ARC4RANDOM
HAVE_SOCKADDR_SA_LEN
...
...
@@ -169,10 +153,8 @@ NOTES:
For *BSD systems you should define
HAVE_SOCKADDR_SA_LEN
HAVE_RANDOM
HAVE_BPF
you should NOT define
HAVE_LINUX_IPV6_PROC
HAVE_RTNETLINK
HAVE_LINUX_NETWORK
and you MAY define
HAVE_ARC4RANDOM - OpenBSD and FreeBSD and NetBSD version 2.0 or later
HAVE_DEV_URANDOM - OpenBSD and FreeBSD and NetBSD
...
...
@@ -185,7 +167,7 @@ NOTES:
/* platform independent options. */
#undef HAVE_BROKEN_RTC
#
define
HAVE_ISC_READER
#
undef
HAVE_ISC_READER
#undef HAVE_DBUS
#if defined(HAVE_BROKEN_RTC) && defined(HAVE_ISC_READER)
...
...
@@ -196,76 +178,47 @@ NOTES:
/* Must preceed __linux__ since uClinux defines __linux__ too. */
#if defined(__uClinux__)
#define HAVE_LINUX_
IPV6_PROC
#define HAVE_LINUX_
NETWORK
#define HAVE_GETOPT_LONG
#define HAVE_RTNETLINK
#undef HAVE_ARC4RANDOM
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_DEV_RANDOM
#undef HAVE_SOCKADDR_SA_LEN
#undef HAVE_PSELECT
/* Never use fork() on uClinux. Note that this is subtly different from the
--keep-in-foreground option, since it also suppresses forking new
processes for TCP connections. It's intended for use on MMU-less kernels. */
#define NO_FORK
#elif defined(__UCLIBC__)
#define HAVE_LINUX_
IPV6_PROC
#define HAVE_LINUX_
NETWORK
#if defined(__UCLIBC_HAS_GNU_GETOPT__) || \
((__UCLIBC_MAJOR__==0) && (__UCLIBC_MINOR__==9) && (__UCLIBC_SUBLEVEL__<21))
# define HAVE_GETOPT_LONG
#
else
#else
# undef HAVE_GETOPT_LONG
# endif
#define HAVE_RTNETLINK
#endif
#undef HAVE_ARC4RANDOM
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_DEV_RANDOM
#undef HAVE_SOCKADDR_SA_LEN
#undef HAVE_PSELECT
#if !defined(__ARCH_HAS_MMU__)
#if !defined(__UCLIBC_HAS_MMU__)
# define NO_FORK
#endif
#if !defined(__UCLIBC_HAS_IPV6__)
# define NO_IPV6
#endif
/* libc5 - must precede __linux__ too */
/* Note to build a libc5 binary on a modern Debian system:
install the packages altgcc libc5 and libc5-altdev
then run "make CC=i486-linuxlibc1-gcc" */
/* Note that compling dnsmasq 2.x under libc5 and kernel 2.0.x
is probably doomed - no packet socket for starters. */
#elif defined(__linux__) && \
defined(_LINUX_C_LIB_VERSION_MAJOR) && \
(_LINUX_C_LIB_VERSION_MAJOR == 5 )
#undef HAVE_IPV6
#undef HAVE_LINUX_IPV6_PROC
#undef HAVE_RTNETLINK
#define HAVE_GETOPT_LONG
#undef HAVE_ARC4RANDOM
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_DEV_RANDOM
#undef HAVE_SOCKADDR_SA_LEN
#undef HAVE_PSELECT
/* Fix various misfeatures of libc5 headers */
typedef
unsigned
long
in_addr_t
;
typedef
size_t
socklen_t
;
/* This is for glibc 2.x */
#elif defined(__linux__)
#define HAVE_LINUX_IPV6_PROC
#define HAVE_RTNETLINK
#define HAVE_LINUX_NETWORK
#define HAVE_GETOPT_LONG
#undef HAVE_ARC4RANDOM
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_DEV_RANDOM
#undef HAVE_SOCKADDR_SA_LEN
#define HAVE_PSELECT
/* glibc < 2.2 has broken Sockaddr_in6 so we have to use our own. */
/* glibc < 2.2 doesn't define in_addr_t */
#if defined(__GLIBC__) && (__GLIBC__ == 2) && \
...
...
@@ -275,8 +228,7 @@ typedef unsigned long in_addr_t;
#endif
#elif defined(__FreeBSD__) || defined(__OpenBSD__)
#undef HAVE_LINUX_IPV6_PROC
#undef HAVE_RTNETLINK
#undef HAVE_LINUX_NETWORK
/* Later verions of FreeBSD have getopt_long() */
#if defined(optional_argument) && defined(required_argument)
# define HAVE_GETOPT_LONG
...
...
@@ -287,51 +239,29 @@ typedef unsigned long in_addr_t;
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_SOCKADDR_SA_LEN
#undef HAVE_PSELECT
#define HAVE_BPF
#elif defined(__APPLE__)
#undef HAVE_LINUX_IPV6_PROC
#undef HAVE_RTNETLINK
#undef HAVE_LINUX_NETWORK
#undef HAVE_GETOPT_LONG
#define HAVE_ARC4RANDOM
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_SOCKADDR_SA_LEN
#undef HAVE_PSELECT
#define HAVE_BPF
/* Define before sys/socket.h is included so we get socklen_t */
#define _BSD_SOCKLEN_T_
/* This is not defined in Mac OS X arpa/nameserv.h */
#define IN6ADDRSZ 16
#elif defined(__NetBSD__)
#undef HAVE_LINUX_IPV6_PROC
#undef HAVE_RTNETLINK
#undef HAVE_LINUX_NETWORK
#define HAVE_GETOPT_LONG
#undef HAVE_ARC4RANDOM
#define HAVE_RANDOM
#define HAVE_DEV_URANDOM
#define HAVE_DEV_RANDOM
#define HAVE_SOCKADDR_SA_LEN
#undef HAVE_PSELECT
#define HAVE_BPF
/* env "LIBS=-lsocket -lnsl" make */
#elif defined(__sun) || defined(__sun__)
#undef HAVE_LINUX_IPV6_PROC
#undef HAVE_RTNETLINK
#undef HAVE_GETOPT_LONG
#undef HAVE_ARC4RANDOM
#define HAVE_RANDOM
#undef HAVE_DEV_URANDOM
#undef HAVE_DEV_RANDOM
#undef HAVE_SOCKADDR_SA_LEN
#undef HAVE_PSELECT
#define HAVE_BPF
#endif
/* Decide if we're going to support IPv6 */
/* We assume that systems which don't have IPv6
headers don't have ntop and pton either */
...
...
@@ -353,4 +283,3 @@ typedef unsigned long in_addr_t;
#endif
src/dbus.c
View file @
5e9e0efb
...
...
@@ -113,13 +113,14 @@ static void dbus_read_servers(struct daemon *daemon, DBusMessage *message)
#else
if
(
i
==
sizeof
(
struct
in6_addr
)
-
1
)
{
memcpy
(
&
addr
.
in6
.
sin6_addr
,
p
,
sizeof
(
struct
in6_addr
));
memcpy
(
&
addr
.
in6
.
sin6_addr
,
p
,
sizeof
(
addr
.
in6
));
#ifdef HAVE_SOCKADDR_SA_LEN
source_addr
.
in6
.
sin6_len
=
addr
.
in6
.
sin6_len
=
sizeof
(
struct
sockaddr_
in6
);
source_addr
.
in6
.
sin6_len
=
addr
.
in6
.
sin6_len
=
sizeof
(
addr
.
in6
);
#endif
source_addr
.
in6
.
sin6_family
=
addr
.
in6
.
sin6_family
=
AF_INET6
;
addr
.
in6
.
sin6_port
=
htons
(
NAMESERVER_PORT
);
source_addr
.
in6
.
sin6_flowinfo
=
addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
source_addr
.
in6
.
sin6_flowinfo
=
addr
.
in6
.
sin6_flowinfo
=
0
;
source_addr
.
in6
.
sin6_scope_id
=
addr
.
in6
.
sin6_scope_id
=
0
;
source_addr
.
in6
.
sin6_addr
=
in6addr_any
;
source_addr
.
in6
.
sin6_port
=
htons
(
daemon
->
query_port
);
skip
=
0
;
...
...
@@ -216,7 +217,7 @@ static void dbus_read_servers(struct daemon *daemon, DBusMessage *message)
}
DBusHandlerResult
message_handler
(
DBusConnection
*
connection
,
DBusHandlerResult
message_handler
(
DBusConnection
*
connection
,
DBusMessage
*
message
,
void
*
user_data
)
{
...
...
@@ -239,7 +240,7 @@ DBusHandlerResult message_handler (DBusConnection *connection,
check_servers
(
daemon
);
}
else
if
(
strcmp
(
method
,
"ClearCache"
)
==
0
)
clear_cache_and_reload
(
daemon
,
dnsmasq_time
(
daemon
->
uptime_fd
)
);
clear_cache_and_reload
(
daemon
);
else
return
(
DBUS_HANDLER_RESULT_NOT_YET_HANDLED
);
...
...
src/dhcp.c
View file @
5e9e0efb
...
...
@@ -10,15 +10,22 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#include "dnsmasq.h"
struct
iface_param
{
struct
in_addr
relay
,
primary
;
struct
dhcp_context
*
current
;
int
ind
;
};
static
int
complete_context
(
struct
daemon
*
daemon
,
struct
in_addr
local
,
int
if_index
,
struct
in_addr
netmask
,
struct
in_addr
broadcast
,
void
*
vparam
);
void
dhcp_init
(
struct
daemon
*
daemon
)
{
int
fd
=
socket
(
PF_INET
,
SOCK_DGRAM
,
IPPROTO_UDP
);
struct
sockaddr_in
saddr
;
int
flags
,
oneopt
=
1
,
zeroopt
=
0
;
int
flags
,
oneopt
=
1
;
struct
dhcp_config
*
configs
,
*
cp
;
if
(
fd
==
-
1
)
...
...
@@ -26,7 +33,7 @@ void dhcp_init(struct daemon *daemon)
if
((
flags
=
fcntl
(
fd
,
F_GETFL
,
0
))
==
-
1
||
fcntl
(
fd
,
F_SETFL
,
flags
|
O_NONBLOCK
)
==
-
1
||
#if defined(
IP_PKTINFO
)
#if defined(
HAVE_LINUX_NETWORK
)
setsockopt
(
fd
,
SOL_IP
,
IP_PKTINFO
,
&
oneopt
,
sizeof
(
oneopt
))
==
-
1
||
#elif defined(IP_RECVIF)
setsockopt
(
fd
,
IPPROTO_IP
,
IP_RECVIF
,
&
oneopt
,
sizeof
(
oneopt
))
==
-
1
||
...
...
@@ -53,42 +60,21 @@ void dhcp_init(struct daemon *daemon)
daemon
->
dhcpfd
=
fd
;
if
((
fd
=
socket
(
AF_INET
,
SOCK_RAW
,
IPPROTO_ICMP
))
==
-
1
||
(
flags
=
fcntl
(
fd
,
F_GETFL
,
0
))
==
-
1
||
fcntl
(
fd
,
F_SETFL
,
flags
|
O_NONBLOCK
)
==
-
1
||
setsockopt
(
fd
,
SOL_SOCKET
,
SO_RCVBUF
,
&
oneopt
,
sizeof
(
oneopt
))
==
-
1
||
setsockopt
(
fd
,
SOL_SOCKET
,
SO_DONTROUTE
,
&
zeroopt
,
sizeof
(
zeroopt
))
==
-
1
)
die
(
_
(
"cannot create ICMP raw socket: %s."
),
NULL
);
#ifndef HAVE_LINUX_NETWORK
/* When we're not using capabilities, we need to do this here before
we drop root. Also, set buffer size small, to avoid wasting
kernel buffers */
daemon
->
dhcp_icmp_fd
=
fd
;
if
(
daemon
->
options
&
OPT_NO_PING
)
daemon
->
dhcp_icmp_fd
=
-
1
;
else
if
((
daemon
->
dhcp_icmp_fd
=
make_icmp_sock
())
==
-
1
||
setsockopt
(
daemon
->
dhcp_icmp_fd
,
SOL_SOCKET
,
SO_RCVBUF
,
&
oneopt
,
sizeof
(
oneopt
))
==
-
1
)
die
(
_
(
"cannot create ICMP raw socket: %s."
),
NULL
);
#ifdef HAVE_BPF
{
int
i
=
0
;
while
(
1
)
{
char
filename
[
50
];
sprintf
(
filename
,
"/dev/bpf%d"
,
i
++
);
if
((
fd
=
open
(
filename
,
O_RDWR
,
0
))
!=
-
1
)
break
;
if
(
errno
!=
EBUSY
)
die
(
_
(
"cannot create DHCP BPF socket: %s"
),
NULL
);
}
}
#else
/* since we don't ever use the packet socket for reception,
and it receives copies of _all_ IP packets, then that data
will build up in kernel buffers, wasting memory. Set the
socket receive buffer size to one to avoid that. (zero is
rejected as non-sensical by some BSD kernels) */
if
((
fd
=
socket
(
PF_PACKET
,
SOCK_DGRAM
,
htons
(
ETHERTYPE_IP
)))
==
-
1
||
setsockopt
(
fd
,
SOL_SOCKET
,
SO_RCVBUF
,
&
oneopt
,
sizeof
(
oneopt
))
==
-
1
)
die
(
_
(
"cannot create DHCP packet socket: %s. "
"Is CONFIG_PACKET enabled in your kernel?"
),
NULL
);
/* Make BPF raw send socket */
init_bpf
(
daemon
);
#endif
daemon
->
dhcp_raw_fd
=
fd
;
/* If the same IP appears in more than one host config, then DISCOVER
for one of the hosts will get the address, but REQUEST will be NAKed,
since the address is reserved by the other one -> protocol loop. */
...
...
@@ -97,7 +83,8 @@ void dhcp_init(struct daemon *daemon)
if
((
configs
->
flags
&
cp
->
flags
&
CONFIG_ADDR
)
&&
configs
->
addr
.
s_addr
==
cp
->
addr
.
s_addr
)
die
(
_
(
"duplicate IP address %s in dhcp-config directive."
),
inet_ntoa
(
cp
->
addr
));
daemon
->
dhcp_packet
=
safe_malloc
(
sizeof
(
struct
udp_dhcp_packet
));
daemon
->
dhcp_packet
.
iov_len
=
sizeof
(
struct
dhcp_packet
);
daemon
->
dhcp_packet
.
iov_base
=
safe_malloc
(
daemon
->
dhcp_packet
.
iov_len
);
/* These two each hold a DHCP option max size 255
and get a terminating zero added */
daemon
->
dhcp_buff
=
safe_malloc
(
256
);
...
...
@@ -107,48 +94,57 @@ void dhcp_init(struct daemon *daemon)
void
dhcp_packet
(
struct
daemon
*
daemon
,
time_t
now
)
{
struct
udp_dhcp_packet
*
rawpacket
=
daemon
->
dhcp_packet
;
struct
dhcp_packet
*
mess
=
&
rawpacket
->
data
;
struct
dhcp_packet
*
mess
;
struct
dhcp_context
*
context
;
struct
iname
*
tmp
;
struct
ifreq
ifr
;
struct
msghdr
msg
;
struct
iovec
iov
[
2
]
;
struct
sockaddr_in
dest
;
struct
cmsghdr
*
cmptr
;
struct
iovec
iov
;
ssize_t
sz
;
size_t
newlen
;
int
iface_index
=
0
,
unicast_dest
=
0
;
struct
in_addr
iface_addr
;
#ifdef HAVE_BPF
unsigned
char
iface_hwaddr
[
ETHER_ADDR_LEN
];
#endif
struct
iface_param
parm
;
union
{
struct
cmsghdr
align
;
/* this ensures alignment */
#ifdef
IP_PKTINFO
#ifdef
HAVE_LINUX_NETWORK
char
control
[
CMSG_SPACE
(
sizeof
(
struct
in_pktinfo
))];
#else
char
control
[
CMSG_SPACE
(
sizeof
(
struct
sockaddr_dl
))];
#endif
}
control_u
;
iov
[
0
].
iov_base
=
(
char
*
)
mess
;
iov
[
0
].
iov_len
=
sizeof
(
struct
dhcp_packet
);
msg
.
msg_control
=
control_u
.
control
;
msg
.
msg_controllen
=
sizeof
(
control_u
);
msg
.
msg_flags
=
0
;
msg
.
msg_name
=
NULL
;
msg
.
msg_namelen
=
0
;
msg
.
msg_iov
=
iov
;
msg
.
msg_iov
=
&
daemon
->
dhcp_packet
;
msg
.
msg_iovlen
=
1
;
sz
=
recvmsg
(
daemon
->
dhcpfd
,
&
msg
,
0
);
do
{
msg
.
msg_flags
=
0
;
while
((
sz
=
recvmsg
(
daemon
->
dhcpfd
,
&
msg
,
MSG_PEEK
))
==
-
1
&&
errno
==
EINTR
);
}
while
(
sz
!=
-
1
&&
(
msg
.
msg_flags
&
MSG_TRUNC
)
&&
expand_buf
(
&
daemon
->
dhcp_packet
,
daemon
->
dhcp_packet
.
iov_len
+
100
));
if
(
sz
<
(
ssize_t
)(
sizeof
(
*
mess
)
-
sizeof
(
mess
->
options
)))
/* expand_buf may have moved buffer */
mess
=
daemon
->
dhcp_packet
.
iov_base
;
msg
.
msg_controllen
=
sizeof
(
control_u
);
msg
.
msg_flags
=
0
;
msg
.
msg_name
=
&
dest
;
msg
.
msg_namelen
=
sizeof
(
dest
);
while
((
sz
=
recvmsg
(
daemon
->
dhcpfd
,
&
msg
,
0
))
&&
errno
==
EINTR
);
if
((
msg
.
msg_flags
&
MSG_TRUNC
)
||
sz
<
(
ssize_t
)(
sizeof
(
*
mess
)
-
sizeof
(
mess
->
options
)))
return
;
#if defined (
IP_PKTINFO
)
#if defined (
HAVE_LINUX_NETWORK
)
if
(
msg
.
msg_controllen
<
sizeof
(
struct
cmsghdr
))
return
;
for
(
cmptr
=
CMSG_FIRSTHDR
(
&
msg
);
cmptr
;
cmptr
=
CMSG_NXTHDR
(
&
msg
,
cmptr
))
...
...
@@ -178,225 +174,122 @@ void dhcp_packet(struct daemon *daemon, time_t now)
struct
iname
*
name
;
for
(
name
=
daemon
->
if_names
;
name
->
isloop
;
name
=
name
->
next
);
strcpy
(
ifr
.
ifr_name
,
name
->
name
);
iface_index
=
if_nametoindex
(
name
->
name
);
}
#endif
#ifdef HAVE_BPF
ifr
.
ifr_addr
.
sa_family
=
AF_LINK
;
if
(
ioctl
(
daemon
->
dhcpfd
,
SIOCGIFADDR
,
&
ifr
)
<
0
)
return
;
memcpy
(
iface_hwaddr
,
LLADDR
((
struct
sockaddr_dl
*
)
&
ifr
.
ifr_addr
),
ETHER_ADDR_LEN
);
#endif
ifr
.
ifr_addr
.
sa_family
=
AF_INET
;
if
(
ioctl
(
daemon
->
dhcpfd
,
SIOCGIFADDR
,
&
ifr
)
<
0
)
return
;
iface_addr
=
((
struct
sockaddr_in
*
)
&
ifr
.
ifr_addr
)
->
sin_addr
;
/* enforce available interface configuration */
for
(
tmp
=
daemon
->
if_except
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
name
&&
(
strcmp
(
tmp
->
name
,
ifr
.
ifr_name
)
==
0
))
return
;
for
(
tmp
=
daemon
->
dhcp_except
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
name
&&
(
strcmp
(
tmp
->
name
,
ifr
.
ifr_name
)
==
0
))
return
;
if
(
daemon
->
if_names
||
daemon
->
if_addrs
)
{
for
(
tmp
=
daemon
->
if_names
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
name
&&
(
strcmp
(
tmp
->
name
,
ifr
.
ifr_name
)
==
0
))
break
;
if
(
!
tmp
)
for
(
tmp
=
daemon
->
if_addrs
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
addr
.
sa
.
sa_family
==
AF_INET
&&
tmp
->
addr
.
in
.
sin_addr
.
s_addr
==
iface_addr
.
s_addr
)
break
;
if
(
!
tmp
)
if
(
!
iface_check
(
daemon
,
AF_INET
,
(
struct
all_addr
*
)
&
iface_addr
,
ifr
.
ifr_name
))
return
;
}
/* unlinked contexts are marked by context->current == context */
for
(
context
=
daemon
->
dhcp
;
context
;
context
=
context
->
next
)
context
->
current
=
context
;
#ifdef HAVE_RTNETLINK
if
(
!
netlink_process
(
daemon
,
iface_index
,
mess
->
giaddr
,
iface_addr
,
&
context
))
#endif
{
struct
in_addr
iface_netmask
,
iface_broadcast
;
#ifdef HAVE_RTNETLINK
static
int
warned
=
0
;
parm
.
relay
=
mess
->
giaddr
;
parm
.
primary
=
iface_addr
;
parm
.
current
=
NULL
;
parm
.
ind
=
iface_index
;
if
(
!
warned
)
{
syslog
(
LOG_WARNING
,
_
(
"Cannot use RTnetlink socket, falling back to ioctl API"
));
warned
=
1
;
}
#endif
if
(
ioctl
(
daemon
->
dhcpfd
,
SIOCGIFNETMASK
,
&
ifr
)
<
0
)
if
(
!
iface_enumerate
(
daemon
,
&
parm
,
complete_context
,
NULL
))
return
;
iface_netmask
=
((
struct
sockaddr_in
*
)
&
ifr
.
ifr_addr
)
->
sin_addr
;
if
(
ioctl
(
daemon
->
dhcpfd
,
SIOCGIFBRDADDR
,
&
ifr
)
<
0
)
return
;
iface_broadcast
=
((
struct
sockaddr_in
*
)
&
ifr
.
ifr_addr
)
->
sin_addr
;
context
=
complete_context
(
daemon
,
iface_addr
,
NULL
,
iface_netmask
,
iface_broadcast
,
mess
->
giaddr
,
iface_addr
);
}
lease_prune
(
NULL
,
now
);
/* lose any expired leases */
newlen
=
dhcp_reply
(
daemon
,
contex
t
,
ifr
.
ifr_name
,
(
size_t
)
sz
,
now
,
unicast_dest
);
lease_update_file
(
daemon
,
0
,
now
);
iov
.
iov_len
=
dhcp_reply
(
daemon
,
parm
.
curren
t
,
ifr
.
ifr_name
,
(
size_t
)
sz
,
now
,
unicast_dest
);
lease_update_file
(
daemon
);
lease_update_dns
(
daemon
);
if
(
new
len
==
0
)
if
(
iov
.
iov_
len
==
0
)
return
;
if
(
mess
->
giaddr
.
s_addr
||
mess
->
ciaddr
.
s_addr
)
{
/* To send to BOOTP relay or configured client, use the IP packet */
msg
.
msg_name
=
&
dest
;
msg
.
msg_namelen
=
sizeof
(
dest
);
msg
.
msg_control
=
NULL
;
msg
.
msg_controllen
=
0
;
msg
.
msg_iov
=
&
iov
;
iov
.
iov_base
=
daemon
->
dhcp_packet
.
iov_base
;
/* packet buffer may have moved */
mess
=
daemon
->
dhcp_packet
.
iov_base
;
struct
sockaddr_in
dest
;
dest
.
sin_family
=
AF_INET
;
#ifdef HAVE_SOCKADDR_SA_LEN
dest
.
sin_len
=
sizeof
(
struct
sockaddr_in
);
#endif
if
(
mess
->
giaddr
.
s_addr
)
{
/* Send to BOOTP relay */
if
(
!
dest
.
sin_port
)
dest
.
sin_port
=
htons
(
DHCP_SERVER_PORT
);
dest
.
sin_addr
=
mess
->
giaddr
;
}
else
else
if
(
mess
->
ciaddr
.
s_addr
)
{
dest
.
sin_port
=
htons
(
DHCP_CLIENT_PORT
);
dest
.
sin_addr
=
mess
->
ciaddr
;
if
(
!
dest
.
sin_port
)
dest
.
sin_port
=
htons
(
DHCP_CLIENT_PORT
);
}
while
(
sendto
(
daemon
->
dhcpfd
,
mess
,
newlen
,
0
,
(
struct
sockaddr
*
)
&
dest
,
sizeof
(
dest
))
==
-
1
&&
retry_send
());
}
else
#ifdef HAVE_LINUX_NETWORK
else
if
(
ntohs
(
mess
->
flags
)
&
0x8000
)
{
/* Hairy stuff, packet either has to go to the
net broadcast or the destination can't reply to ARP yet,
but we do know the physical address.
Build the packet by steam, and send directly, bypassing
the kernel IP stack */
u32
i
,
sum
;
unsigned
char
hwdest
[
DHCP_CHADDR_MAX
];
if
(
ntohs
(
mess
->
flags
)
&
0x8000
)
{
memset
(
hwdest
,
255
,
mess
->
hlen
);
rawpacket
->
ip
.
ip_dst
.
s_addr
=
INADDR_BROADCAST
;
/* broadcast to 255.255.255.255 */
struct
in_pktinfo
*
pkt
;
msg
.
msg_controllen
=
sizeof
(
control_u
);
cmptr
=
CMSG_FIRSTHDR
(
&
msg
);
dest
.
sin_addr
.
s_addr
=
INADDR_BROADCAST
;
dest
.
sin_port
=
htons
(
DHCP_CLIENT_PORT
);
pkt
=
(
struct
in_pktinfo
*
)
CMSG_DATA
(
cmptr
);
pkt
->
ipi_ifindex
=
iface_index
;
pkt
->
ipi_spec_dst
.
s_addr
=
0
;
msg
.
msg_controllen
=
cmptr
->
cmsg_len
=
CMSG_LEN
(
sizeof
(
struct
in_pktinfo
));
cmptr
->
cmsg_level
=
SOL_IP
;
cmptr
->
cmsg_type
=
IP_PKTINFO
;
}
else
{
memcpy
(
hwdest
,
mess
->
chaddr
,
mess
->
hlen
);
rawpacket
->
ip
.
ip_dst
.
s_addr
=
mess
->
yiaddr
.
s_addr
;
}
rawpacket
->
ip
.
ip_p
=
IPPROTO_UDP
;
rawpacket
->
ip
.
ip_src
.
s_addr
=
iface_addr
.
s_addr
;
rawpacket
->
ip
.
ip_len
=
htons
(
sizeof
(
struct
ip
)
+
sizeof
(
struct
udphdr
)
+
newlen
)
;
rawpacket
->
ip
.
ip_hl
=
sizeof
(
struct
ip
)
/
4
;
rawpacket
->
ip
.
ip_v
=
IPVERSION
;
rawpacket
->
ip
.
ip_tos
=
0
;
rawpacket
->
ip
.
ip_id
=
htons
(
0
);
rawpacket
->
ip
.
ip_off
=
htons
(
0x4000
);
/* don't fragment */
rawpacket
->
ip
.
ip_ttl
=
IPDEFTTL
;
rawpacket
->
ip
.
ip_sum
=
0
;
for
(
sum
=
0
,
i
=
0
;
i
<
sizeof
(
struct
ip
)
/
2
;
i
++
)
sum
+=
((
u16
*
)
&
rawpacket
->
ip
)[
i
];
while
(
sum
>>
16
)
sum
=
(
sum
&
0xffff
)
+
(
sum
>>
16
);
rawpacket
->
ip
.
ip_sum
=
(
sum
==
0xffff
)
?
sum
:
~
sum
;
rawpacket
->
udp
.
uh_sport
=
htons
(
DHCP_SERVER_PORT
);
rawpacket
->
udp
.
uh_dport
=
htons
(
DHCP_CLIENT_PORT
);
if
(
newlen
&
1
)
((
u8
*
)
&
rawpacket
->
data
)[
newlen
]
=
0
;
/* for checksum, in case length is odd. */
rawpacket
->
udp
.
uh_sum
=
0
;
rawpacket
->
udp
.
uh_ulen
=
sum
=
htons
(
sizeof
(
struct
udphdr
)
+
newlen
);
sum
+=
htons
(
IPPROTO_UDP
);
for
(
i
=
0
;
i
<
4
;
i
++
)
sum
+=
((
u16
*
)
&
rawpacket
->
ip
.
ip_src
)[
i
];
for
(
i
=
0
;
i
<
(
sizeof
(
struct
udphdr
)
+
newlen
+
1
)
/
2
;
i
++
)
sum
+=
((
u16
*
)
&
rawpacket
->
udp
)[
i
];
while
(
sum
>>
16
)
sum
=
(
sum
&
0xffff
)
+
(
sum
>>
16
);
rawpacket
->
udp
.
uh_sum
=
(
sum
==
0xffff
)
?
sum
:
~
sum
;
{
#ifdef HAVE_BPF
struct
ether_header
header
;
/* Only know how to do ethernet on *BSD */
if
(
mess
->
htype
!=
ARPHRD_ETHER
||
mess
->
hlen
!=
ETHER_ADDR_LEN
)
syslog
(
LOG_WARNING
,
_
(
"DHCP request for unsupported hardware type (%d) recieved on %s"
),
mess
->
htype
,
ifr
.
ifr_name
);
/* unicast to unconfigured client */
dest
.
sin_addr
=
mess
->
yiaddr
;
dest
.
sin_port
=
htons
(
DHCP_CLIENT_PORT
);
if
(
mess
->
hlen
!=
0
&&
mess
->
htype
!=
0
)
arp_inject
(
daemon
->
netlinkfd
,
mess
->
yiaddr
,
iface_index
,
mess
->
chaddr
,
mess
->
hlen
);
}
#else
else
{
header
.
ether_type
=
htons
(
ETHERTYPE_IP
);
memcpy
(
header
.
ether_shost
,
iface_hwaddr
,
ETHER_ADDR_LEN
);
memcpy
(
header
.
ether_dhost
,
hwdest
,
ETHER_ADDR_LEN
);
ioctl
(
daemon
->
dhcp_raw_fd
,
BIOCSETIF
,
&
ifr
);
iov
[
0
].
iov_base
=
(
char
*
)
&
header
;
iov
[
0
].
iov_len
=
sizeof
(
struct
ether_header
);
iov
[
1
].
iov_base
=
(
char
*
)
rawpacket
;
iov
[
1
].
iov_len
=
ntohs
(
rawpacket
->
ip
.
ip_len
);
while
(
writev
(
daemon
->
dhcp_raw_fd
,
iov
,
2
)
==
-
1
&&
retry_send
());
send_via_bpf
(
daemon
,
mess
,
iov
.
iov_len
,
iface_addr
,
&
ifr
);
return
;
}
#else
/* Most definitions of this only include 8 bytes of address,
so we roll our own, since later kernels allow more. */
struct
{
unsigned
short
int
sll_family
;
unsigned
short
int
sll_protocol
;
int
sll_ifindex
;
unsigned
short
int
sll_hatype
;
unsigned
char
sll_pkttype
;
unsigned
char
sll_halen
;
unsigned
char
sll_addr
[
DHCP_CHADDR_MAX
];
}
dest
;
memset
(
&
dest
,
0
,
sizeof
(
dest
));
dest
.
sll_family
=
AF_PACKET
;
dest
.
sll_halen
=
mess
->
hlen
;
dest
.
sll_ifindex
=
iface_index
;
dest
.
sll_protocol
=
htons
(
ETHERTYPE_IP
);
memcpy
(
dest
.
sll_addr
,
hwdest
,
mess
->
hlen
);
while
(
sendto
(
daemon
->
dhcp_raw_fd
,
rawpacket
,
ntohs
(
rawpacket
->
ip
.
ip_len
),
0
,
(
struct
sockaddr
*
)
&
dest
,
sizeof
(
dest
))
==
-
1
&&
retry_send
());
#endif
}
}
while
(
sendmsg
(
daemon
->
dhcpfd
,
&
msg
,
0
)
==
-
1
&&
retry_send
());
}
/* This is a complex routine: it gets called with each (address,netmask,broadcast) triple
of the interface on which a DHCP packet arrives (and any relay address) and does the
following things:
1) Fills in any netmask and broadcast addresses which have not been explicitly configured.
2) Fills in local (this host) and router (this host or relay) addresses.
3) Links contexts which are valid for hosts directly connected to the arrival interface on ->current.
of each interface (and any relay address) and does the following things:
1) Discards stuff for interfaces other than the one on which a DHCP packet just arrived.
2) Fills in any netmask and broadcast addresses which have not been explicitly configured.
3) Fills in local (this host) and router (this host or relay) addresses.
4) Links contexts which are valid for hosts directly connected to the arrival interface on ->current.
Note that the current chain may be superceded later for configured hosts or those coming via gateways. */
struct
dhcp_context
*
complete_context
(
struct
daemon
*
daemon
,
struct
in_addr
local
,
struct
dhcp_context
*
current
,
struct
in_addr
netmask
,
struct
in_addr
broadcast
,
struct
in_addr
relay
,
struct
in_addr
primary
)
static
int
complete_context
(
struct
daemon
*
daemon
,
struct
in_addr
local
,
int
if_index
,
struct
in_addr
netmask
,
struct
in_addr
broadcast
,
void
*
vparam
)
{
struct
dhcp_context
*
context
;
struct
iface_param
*
param
=
vparam
;
if
(
if_index
!=
param
->
ind
)
return
1
;
/* no for us. */
for
(
context
=
daemon
->
dhcp
;
context
;
context
=
context
->
next
)
{
...
...
@@ -426,8 +319,8 @@ struct dhcp_context *complete_context(struct daemon *daemon, struct in_addr loca
{
context
->
router
=
local
;
context
->
local
=
local
;
context
->
current
=
current
;
current
=
context
;
context
->
current
=
param
->
current
;
param
->
current
=
context
;
}
if
(
!
(
context
->
flags
&
CONTEXT_BRDCAST
))
...
...
@@ -438,10 +331,10 @@ struct dhcp_context *complete_context(struct daemon *daemon, struct in_addr loca
context
->
broadcast
.
s_addr
=
context
->
start
.
s_addr
|
~
context
->
netmask
.
s_addr
;
}
}
else
if
(
relay
.
s_addr
&&
is_same_net
(
relay
,
context
->
start
,
context
->
netmask
))
else
if
(
param
->
relay
.
s_addr
&&
is_same_net
(
param
->
relay
,
context
->
start
,
context
->
netmask
))
{
context
->
router
=
relay
;
context
->
local
=
primary
;
context
->
router
=
param
->
relay
;
context
->
local
=
p
aram
->
p
rimary
;
/* fill in missing broadcast addresses for relayed ranges */
if
(
!
(
context
->
flags
&
CONTEXT_BRDCAST
))
context
->
broadcast
.
s_addr
=
context
->
start
.
s_addr
|
~
context
->
netmask
.
s_addr
;
...
...
@@ -450,25 +343,31 @@ struct dhcp_context *complete_context(struct daemon *daemon, struct in_addr loca
}
}
return
current
;
return
1
;
}
struct
dhcp_context
*
address_available
(
struct
dhcp_context
*
context
,
struct
in_addr
taddr
)
{
/* Check is an address is OK for this network, check all
possible ranges. */
possible ranges. Make sure that the address isn't in use
by the server itself. */
unsigned
int
start
,
end
,
addr
=
ntohl
(
taddr
.
s_addr
);
struct
dhcp_context
*
tmp
;
for
(;
context
;
context
=
context
->
current
)
for
(
tmp
=
context
;
tmp
;
tmp
=
tmp
->
current
)
if
(
taddr
.
s_addr
==
context
->
local
.
s_addr
)
return
NULL
;
for
(
tmp
=
context
;
tmp
;
tmp
=
tmp
->
current
)
{
start
=
ntohl
(
context
->
start
.
s_addr
);
end
=
ntohl
(
context
->
end
.
s_addr
);
start
=
ntohl
(
tmp
->
start
.
s_addr
);
end
=
ntohl
(
tmp
->
end
.
s_addr
);
if
(
!
(
context
->
flags
&
CONTEXT_STATIC
)
&&
if
(
!
(
tmp
->
flags
&
CONTEXT_STATIC
)
&&
addr
>=
start
&&
addr
<=
end
)
return
context
;
return
tmp
;
}
return
NULL
;
...
...
@@ -547,11 +446,15 @@ int address_allocate(struct dhcp_context *context, struct daemon *daemon,
a particular hwaddr/clientid/hostname in our configuration.
Try to return from contexts which match netids first. */
struct
in_addr
start
,
addr
;
struct
dhcp_context
*
c
;
struct
in_addr
start
,
addr
;
struct
dhcp_context
*
c
,
*
d
;
int
i
,
pass
;
unsigned
int
j
;
/* hash hwaddr */
for
(
j
=
0
,
i
=
0
;
i
<
hw_len
;
i
++
)
j
+=
hwaddr
[
i
]
+
(
hwaddr
[
i
]
<<
8
)
+
(
hwaddr
[
i
]
<<
16
);
for
(
pass
=
0
;
pass
<=
1
;
pass
++
)
for
(
c
=
context
;
c
;
c
=
c
->
current
)
if
(
c
->
flags
&
CONTEXT_STATIC
)
...
...
@@ -561,34 +464,40 @@ int address_allocate(struct dhcp_context *context, struct daemon *daemon,
else
{
/* pick a seed based on hwaddr then iterate until we find a free address. */
for
(
j
=
c
->
addr_epoch
,
i
=
0
;
i
<
hw_len
;
i
++
)
j
+=
hwaddr
[
i
]
+
(
hwaddr
[
i
]
<<
8
)
+
(
hwaddr
[
i
]
<<
16
);
start
.
s_addr
=
addr
.
s_addr
=
htonl
(
ntohl
(
c
->
start
.
s_addr
)
+
(
j
%
(
1
+
ntohl
(
c
->
end
.
s_addr
)
-
ntohl
(
c
->
start
.
s_addr
))));
(
(
j
+
c
->
addr_epoch
)
%
(
1
+
ntohl
(
c
->
end
.
s_addr
)
-
ntohl
(
c
->
start
.
s_addr
))));
do
{
if
(
!
lease_find_by_addr
(
addr
)
&&
/* eliminate addresses in use by the server. */
for
(
d
=
context
;
d
;
d
=
d
->
current
)
if
(
addr
.
s_addr
==
d
->
local
.
s_addr
)
break
;
if
(
!
d
&&
!
lease_find_by_addr
(
addr
)
&&
!
config_find_by_address
(
daemon
->
dhcp_conf
,
addr
))
{
struct
ping_result
*
r
,
*
victim
=
NULL
;
int
count
;
int
count
,
max
=
(
int
)(
0
.
6
*
(((
float
)
PING_CACHE_TIME
)
/
((
float
)
PING_WAIT
)));
*
addrp
=
addr
;
if
(
daemon
->
options
&
OPT_NO_PING
)
return
1
;
/* check if we failed to ping addr sometime in the last
30
s. If so, assume the same situation still exists.
PING_CACHE_TIME second
s. If so, assume the same situation still exists.
This avoids problems when a stupid client bangs
on us repeatedly. As a final check, i
s
we did more
than
six ping checks in the last 30s, we are in
high-load mode, so don't do any more. */
on us repeatedly. As a final check, i
f
we did more
than
60% of the possible ping checks in the last
PING_CACHE_TIME, we are in
high-load mode, so don't do any more. */
for
(
count
=
0
,
r
=
daemon
->
ping_results
;
r
;
r
=
r
->
next
)
if
(
difftime
(
now
,
r
->
time
)
>
30
.
0
)
if
(
difftime
(
now
,
r
->
time
)
>
(
float
)
PING_CACHE_TIME
)
victim
=
r
;
/* old record */
else
if
(
++
count
==
6
||
r
->
addr
.
s_addr
==
addr
.
s_addr
)
{
*
addrp
=
addr
;
else
if
(
++
count
==
max
||
r
->
addr
.
s_addr
==
addr
.
s_addr
)
return
1
;
}
if
(
icmp_ping
(
daemon
,
addr
))
/* address in use: perturb address selection so that we are
...
...
@@ -613,7 +522,6 @@ int address_allocate(struct dhcp_context *context, struct daemon *daemon,
victim
->
addr
=
addr
;
victim
->
time
=
now
;
}
*
addrp
=
addr
;
return
1
;
}
}
...
...
@@ -677,7 +585,6 @@ struct dhcp_config *find_config(struct dhcp_config *configs,
is_addr_in_context
(
context
,
config
))
return
config
;
if
(
hostname
&&
context
)
for
(
config
=
configs
;
config
;
config
=
config
->
next
)
if
((
config
->
flags
&
CONFIG_NAME
)
&&
...
...
@@ -690,16 +597,9 @@ struct dhcp_config *find_config(struct dhcp_config *configs,
config
->
wildcard_mask
!=
0
&&
config
->
hwaddr_len
==
hw_len
&&
(
config
->
hwaddr_type
==
hw_type
||
config
->
hwaddr_type
==
0
)
&&
is_addr_in_context
(
context
,
config
))
{
int
i
;
unsigned
int
mask
=
config
->
wildcard_mask
;
for
(
i
=
hw_len
-
1
;
i
>=
0
;
i
--
,
mask
=
mask
>>
1
)
if
(
mask
&
1
)
config
->
hwaddr
[
i
]
=
hwaddr
[
i
];
if
(
memcmp
(
config
->
hwaddr
,
hwaddr
,
hw_len
)
==
0
)
is_addr_in_context
(
context
,
config
)
&&
memcmp_masked
(
config
->
hwaddr
,
hwaddr
,
hw_len
,
config
->
wildcard_mask
))
return
config
;
}
return
NULL
;
}
...
...
@@ -863,8 +763,8 @@ char *host_from_dns(struct daemon *daemon, struct in_addr addr)
if
(
lookup
&&
(
lookup
->
flags
&
F_HOSTS
))
{
hostname
=
daemon
->
dhcp_buff
;
hostname
[
256
]
=
0
;
strncpy
(
hostname
,
cache_get_name
(
lookup
),
256
);
hostname
[
255
]
=
0
;
hostname
=
strip_hostname
(
daemon
,
hostname
);
}
...
...
src/dnsmasq.c
View file @
5e9e0efb
...
...
@@ -10,8 +10,6 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#include "dnsmasq.h"
static
char
*
compile_opts
=
...
...
@@ -26,9 +24,6 @@ static char *compile_opts =
#ifdef HAVE_BROKEN_RTC
"no-RTC "
#endif
#ifdef HAVE_RTNETLINK
"RTNetlink "
#endif
#ifndef HAVE_ISC_READER
"no-"
#endif
...
...
@@ -42,7 +37,8 @@ static char *compile_opts =
#endif
"I18N "
;
static
volatile
int
sigterm
,
sighup
,
sigusr1
,
sigalarm
,
num_kids
,
in_child
;
static
pid_t
pid
;
static
int
pipewrite
;
static
int
set_dns_listeners
(
struct
daemon
*
daemon
,
fd_set
*
set
,
int
maxfd
);
static
void
check_dns_listeners
(
struct
daemon
*
daemon
,
fd_set
*
set
,
time_t
now
);
...
...
@@ -51,12 +47,12 @@ static void sig_handler(int sig);
int
main
(
int
argc
,
char
**
argv
)
{
struct
daemon
*
daemon
;
int
first_loop
=
1
;
int
bind_fallback
=
0
;
time_t
now
,
last
=
0
;
struct
sigaction
sigact
;
sigset_t
sigmask
;
struct
iname
*
if_tmp
;
int
flags
,
piperead
,
pipefd
[
2
];
unsigned
char
sig
;
#ifndef NO_GETTEXT
setlocale
(
LC_ALL
,
""
);
...
...
@@ -64,16 +60,7 @@ int main (int argc, char **argv)
textdomain
(
"dnsmasq"
);
#endif
sighup
=
1
;
/* init cache the first time through */
sigusr1
=
0
;
/* but don't dump */
sigterm
=
0
;
/* or die */
#ifdef HAVE_BROKEN_RTC
sigalarm
=
1
;
/* need regular lease dumps */
#else
sigalarm
=
0
;
/* or not */
#endif
num_kids
=
0
;
in_child
=
0
;
pid
=
0
;
sigact
.
sa_handler
=
sig_handler
;
sigact
.
sa_flags
=
0
;
...
...
@@ -88,15 +75,6 @@ int main (int argc, char **argv)
sigact
.
sa_handler
=
SIG_IGN
;
sigaction
(
SIGPIPE
,
&
sigact
,
NULL
);
/* now block all the signals, they stay that way except
during the call to pselect */
sigaddset
(
&
sigact
.
sa_mask
,
SIGUSR1
);
sigaddset
(
&
sigact
.
sa_mask
,
SIGTERM
);
sigaddset
(
&
sigact
.
sa_mask
,
SIGHUP
);
sigaddset
(
&
sigact
.
sa_mask
,
SIGALRM
);
sigaddset
(
&
sigact
.
sa_mask
,
SIGCHLD
);
sigprocmask
(
SIG_BLOCK
,
&
sigact
.
sa_mask
,
&
sigmask
);
daemon
=
read_opts
(
argc
,
argv
,
compile_opts
);
if
(
daemon
->
edns_pktsz
<
PACKETSZ
)
...
...
@@ -115,7 +93,12 @@ int main (int argc, char **argv)
die
(
_
(
"ISC dhcpd integration not available: set HAVE_ISC_READER in src/config.h"
),
NULL
);
#endif
if
(
!
enumerate_interfaces
(
daemon
,
&
daemon
->
interfaces
,
NULL
,
NULL
))
#ifdef HAVE_LINUX_NETWORK
netlink_init
(
daemon
);
#endif
daemon
->
interfaces
=
NULL
;
if
(
!
enumerate_interfaces
(
daemon
))
die
(
_
(
"failed to find list of interfaces: %s"
),
NULL
);
if
(
!
(
daemon
->
options
&
OPT_NOWILD
)
&&
...
...
@@ -127,7 +110,7 @@ int main (int argc, char **argv)
if
(
daemon
->
options
&
OPT_NOWILD
)
{
daemon
->
listeners
=
create_bound_listeners
(
daemon
->
interfaces
,
daemon
->
port
);
daemon
->
listeners
=
create_bound_listeners
(
daemon
);
for
(
if_tmp
=
daemon
->
if_names
;
if_tmp
;
if_tmp
=
if_tmp
->
next
)
if
(
if_tmp
->
name
&&
!
if_tmp
->
used
)
...
...
@@ -144,16 +127,11 @@ int main (int argc, char **argv)
forward_init
(
1
);
cache_init
(
daemon
->
cachesize
,
daemon
->
options
&
OPT_LOG
);
#ifdef HAVE_BROKEN_RTC
if
((
daemon
->
uptime_fd
=
open
(
UPTIME
,
O_RDONLY
))
==
-
1
)
die
(
_
(
"cannot open %s:%s"
),
UPTIME
);
#endif
now
=
dnsmasq_time
(
daemon
->
uptime_fd
);
now
=
dnsmasq_time
();
if
(
daemon
->
dhcp
)
{
#if !defined(
IP_PKTINFO
) && !defined(IP_RECVIF)
#if !defined(
HAVE_LINUX_NETWORK
) && !defined(IP_RECVIF)
int
c
;
struct
iname
*
tmp
;
for
(
c
=
0
,
tmp
=
daemon
->
if_names
;
tmp
;
tmp
=
tmp
->
next
)
...
...
@@ -196,7 +174,8 @@ int main (int argc, char **argv)
addr
.
in6
.
sin6_family
=
AF_INET6
;
addr
.
in6
.
sin6_addr
=
in6addr_any
;
addr
.
in6
.
sin6_port
=
htons
(
daemon
->
query_port
);
addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
addr
.
in6
.
sin6_flowinfo
=
0
;
addr
.
in6
.
sin6_scope_id
=
0
;
#ifdef HAVE_SOCKADDR_SA_LEN
addr
.
in6
.
sin6_len
=
sizeof
(
struct
sockaddr_in6
);
#endif
...
...
@@ -204,15 +183,49 @@ int main (int argc, char **argv)
#endif
}
setbuf
(
stdout
,
NULL
);
/* Use a pipe to carry signals back to the event loop in a race-free manner */
if
(
pipe
(
pipefd
)
==
-
1
||
(
flags
=
fcntl
(
pipefd
[
0
],
F_GETFL
))
==
-
1
||
fcntl
(
pipefd
[
0
],
F_SETFL
,
flags
|
O_NONBLOCK
)
==
-
1
||
(
flags
=
fcntl
(
pipefd
[
1
],
F_GETFL
))
==
-
1
||
fcntl
(
pipefd
[
1
],
F_SETFL
,
flags
|
O_NONBLOCK
)
==
-
1
)
die
(
_
(
"cannot create pipe: %s"
),
NULL
);
piperead
=
pipefd
[
0
];
pipewrite
=
pipefd
[
1
];
/* prime the pipe to load stuff first time. */
sig
=
SIGHUP
;
write
(
pipewrite
,
&
sig
,
1
);
if
(
!
(
daemon
->
options
&
OPT_DEBUG
))
{
FILE
*
pidfile
;
struct
passwd
*
ent_pw
;
struct
passwd
*
ent_pw
=
daemon
->
username
?
getpwnam
(
daemon
->
username
)
:
NULL
;
fd_set
test_set
;
int
maxfd
,
i
;
#ifdef HAVE_LINUX_NETWORK
cap_user_header_t
hdr
=
NULL
;
cap_user_data_t
data
=
NULL
;
/* On linux, we keep CAP_NETADMIN (for ARP-injection) and
CAP_NET_RAW (for icmp) if we're doing dhcp */
if
(
ent_pw
)
{
hdr
=
safe_malloc
(
sizeof
(
*
hdr
));
data
=
safe_malloc
(
sizeof
(
*
data
));
hdr
->
version
=
_LINUX_CAPABILITY_VERSION
;
hdr
->
pid
=
0
;
/* this process */
data
->
effective
=
data
->
permitted
=
data
->
inheritable
=
(
1
<<
CAP_NET_ADMIN
)
|
(
1
<<
CAP_NET_RAW
)
|
(
1
<<
CAP_SETGID
)
|
(
1
<<
CAP_SETUID
);
/* Tell kernel to not clear capabilities when dropping root */
if
(
capset
(
hdr
,
data
)
==
-
1
||
prctl
(
PR_SET_KEEPCAPS
,
1
)
==
-
1
)
die
(
_
(
"Cannot set capabilities: %s"
),
NULL
);
}
#endif
FD_ZERO
(
&
test_set
);
maxfd
=
set_dns_listeners
(
daemon
,
&
test_set
,
-
1
);
#ifdef HAVE_DBUS
...
...
@@ -249,16 +262,21 @@ int main (int argc, char **argv)
for
(
i
=
0
;
i
<
64
;
i
++
)
{
#ifdef HAVE_BROKEN_RTC
if
(
i
==
daemon
->
uptime_fd
)
if
(
i
==
piperead
||
i
==
pipewrite
)
continue
;
#ifdef HAVE_LINUX_NETWORK
if
(
i
==
daemon
->
netlinkfd
)
continue
;
#endif
if
(
daemon
->
dhcp
&&
(
i
==
fileno
(
daemon
->
lease_stream
)
||
i
==
daemon
->
dhcpfd
||
#ifndef HAVE_LINUX_NETWORK
i
==
daemon
->
dhcp_raw_fd
||
i
==
daemon
->
dhcp_icmp_fd
))
i
==
daemon
->
dhcp_icmp_fd
||
#endif
i
==
daemon
->
dhcpfd
))
continue
;
if
(
i
<=
maxfd
&&
FD_ISSET
(
i
,
&
test_set
))
...
...
@@ -268,10 +286,11 @@ int main (int argc, char **argv)
}
/* Change uid and gid for security */
if
(
daemon
->
username
&&
(
ent_pw
=
getpwnam
(
daemon
->
username
))
)
if
(
ent_pw
)
{
gid_t
dummy
;
struct
group
*
gp
;
/* remove all supplimentary groups */
setgroups
(
0
,
&
dummy
);
/* change group for /etc/ppp/resolv.conf
...
...
@@ -281,8 +300,21 @@ int main (int argc, char **argv)
setgid
(
gp
->
gr_gid
);
/* finally drop root */
setuid
(
ent_pw
->
pw_uid
);
#ifdef HAVE_LINUX_NETWORK
data
->
effective
=
data
->
permitted
=
(
1
<<
CAP_NET_ADMIN
)
|
(
1
<<
CAP_NET_RAW
);
data
->
inheritable
=
0
;
/* lose the setuid and setgid capbilities */
capset
(
hdr
,
data
);
#endif
}
}
#ifdef HAVE_LINUX_NETWORK
else
prctl
(
PR_SET_DUMPABLE
,
1
);
#endif
openlog
(
"dnsmasq"
,
DNSMASQ_LOG_OPT
(
daemon
->
options
&
OPT_DEBUG
),
...
...
@@ -313,11 +345,6 @@ int main (int argc, char **argv)
if
(
if_tmp
->
name
&&
!
if_tmp
->
used
)
syslog
(
LOG_WARNING
,
_
(
"warning: interface %s does not currently exist"
),
if_tmp
->
name
);
#ifdef HAVE_RTNETLINK
/* Must do this after daemonizing so that the pid is right */
netlink_init
(
daemon
);
#endif
if
(
daemon
->
dhcp
)
{
struct
dhcp_context
*
dhcp_tmp
;
...
...
@@ -332,16 +359,6 @@ int main (int argc, char **argv)
_
(
"DHCP, IP range %s -- %s, lease time %s"
),
daemon
->
dhcp_buff
,
inet_ntoa
(
dhcp_tmp
->
end
),
daemon
->
dhcp_buff2
);
}
#ifdef HAVE_BROKEN_RTC
daemon
->
min_leasetime
=
daemon
->
min_leasetime
/
3
;
if
(
daemon
->
min_leasetime
>
(
60
*
60
*
24
))
daemon
->
min_leasetime
=
60
*
60
*
24
;
if
(
daemon
->
min_leasetime
<
60
)
daemon
->
min_leasetime
=
60
;
prettyprint_time
(
daemon
->
dhcp_buff2
,
daemon
->
min_leasetime
);
syslog
(
LOG_INFO
,
_
(
"DHCP, %s will be written every %s"
),
daemon
->
lease_file
,
daemon
->
dhcp_buff2
);
#endif
}
if
(
!
(
daemon
->
options
&
OPT_DEBUG
)
&&
(
getuid
()
==
0
||
geteuid
()
==
0
))
...
...
@@ -349,49 +366,34 @@ int main (int argc, char **argv)
check_servers
(
daemon
);
while
(
sigterm
==
0
)
{
fd_set
rset
,
wset
,
eset
;
pid
=
getpid
();
if
(
sighup
)
{
clear_cache_and_reload
(
daemon
,
now
);
if
(
daemon
->
resolv_files
&&
(
daemon
->
options
&
OPT_NO_POLL
))
while
(
1
)
{
reload_servers
(
daemon
->
resolv_files
->
name
,
daemon
);
check_servers
(
daemon
);
}
sighup
=
0
;
}
if
(
sigusr1
)
{
dump_cache
(
daemon
);
sigusr1
=
0
;
}
int
maxfd
;
struct
timeval
t
,
*
tp
=
NULL
;
fd_set
rset
,
wset
,
eset
;
if
(
sigalarm
)
{
if
(
daemon
->
dhcp
)
{
lease_update_file
(
daemon
,
1
,
now
);
#ifdef HAVE_BROKEN_RTC
alarm
(
daemon
->
min_leasetime
);
#endif
}
sigalarm
=
0
;
}
t
.
tv_sec
=
0
;
/* no warning */
FD_ZERO
(
&
rset
);
FD_ZERO
(
&
wset
);
FD_ZERO
(
&
eset
);
if
(
!
first_loop
)
{
int
maxfd
=
set_dns_listeners
(
daemon
,
&
rset
,
-
1
);
maxfd
=
set_dns_listeners
(
daemon
,
&
rset
,
-
1
);
#ifdef HAVE_DBUS
/* Whilst polling for the dbus, wake every quarter second */
if
((
daemon
->
options
&
OPT_DBUS
)
&&
!
daemon
->
dbus
)
{
tp
=
&
t
;
tp
->
tv_sec
=
0
;
tp
->
tv_usec
=
250000
;
}
maxfd
=
set_dbus_listeners
(
daemon
,
maxfd
,
&
rset
,
&
wset
,
&
eset
);
#endif
if
(
daemon
->
dhcp
)
{
FD_SET
(
daemon
->
dhcpfd
,
&
rset
);
...
...
@@ -399,61 +401,23 @@ int main (int argc, char **argv)
maxfd
=
daemon
->
dhcpfd
;
}
#ifdef HAVE_RTNETLINK
if
(
daemon
->
netlinkfd
!=
-
1
)
{
#ifdef HAVE_LINUX_NETWORK
FD_SET
(
daemon
->
netlinkfd
,
&
rset
);
if
(
daemon
->
netlinkfd
>
maxfd
)
maxfd
=
daemon
->
netlinkfd
;
}
#endif
/* Whilst polling for the dbus, wake every quarter second */
#ifdef HAVE_PSELECT
{
struct
timespec
*
tp
=
NULL
;
#ifdef HAVE_DBUS
struct
timespec
t
;
if
((
daemon
->
options
&
OPT_DBUS
)
&&
!
daemon
->
dbus
)
{
tp
=
&
t
;
tp
->
tv_sec
=
0
;
tp
->
tv_nsec
=
250000000
;
}
#endif
if
(
pselect
(
maxfd
+
1
,
&
rset
,
&
wset
,
&
eset
,
tp
,
&
sigmask
)
<
0
)
{
/* otherwise undefined after error */
FD_ZERO
(
&
rset
);
FD_ZERO
(
&
wset
);
FD_ZERO
(
&
eset
);
}
}
#else
{
sigset_t
save_mask
;
struct
timeval
*
tp
=
NULL
;
#ifdef HAVE_DBUS
struct
timeval
t
;
if
((
daemon
->
options
&
OPT_DBUS
)
&&
!
daemon
->
dbus
)
{
tp
=
&
t
;
tp
->
tv_sec
=
0
;
tp
->
tv_usec
=
250000
;
}
#endif
sigprocmask
(
SIG_SETMASK
,
&
sigmask
,
&
save_mask
);
FD_SET
(
piperead
,
&
rset
);
if
(
piperead
>
maxfd
)
maxfd
=
piperead
;
if
(
select
(
maxfd
+
1
,
&
rset
,
&
wset
,
&
eset
,
tp
)
<
0
)
{
/* otherwise undefined after error */
FD_ZERO
(
&
rset
);
FD_ZERO
(
&
wset
);
FD_ZERO
(
&
eset
);
}
sigprocmask
(
SIG_SETMASK
,
&
save_mask
,
NULL
);
}
#endif
}
first_loop
=
0
;
now
=
dnsmasq_time
(
daemon
->
uptime_fd
);
now
=
dnsmasq_time
();
/* Check for changes to resolv files once per second max. */
/* Don't go silent for long periods if the clock goes backwards. */
...
...
@@ -506,8 +470,46 @@ int main (int argc, char **argv)
}
}
#ifdef HAVE_RTNETLINK
if
(
daemon
->
netlinkfd
!=
-
1
&&
FD_ISSET
(
daemon
->
netlinkfd
,
&
rset
))
if
(
FD_ISSET
(
piperead
,
&
rset
))
{
if
(
read
(
piperead
,
&
sig
,
1
)
==
1
)
switch
(
sig
)
{
case
SIGHUP
:
clear_cache_and_reload
(
daemon
);
if
(
daemon
->
resolv_files
&&
(
daemon
->
options
&
OPT_NO_POLL
))
{
reload_servers
(
daemon
->
resolv_files
->
name
,
daemon
);
check_servers
(
daemon
);
}
break
;
case
SIGUSR1
:
dump_cache
(
daemon
,
now
);
break
;
case
SIGALRM
:
if
(
daemon
->
dhcp
)
lease_update_file
(
daemon
);
break
;
case
SIGTERM
:
syslog
(
LOG_INFO
,
_
(
"exiting on receipt of SIGTERM"
));
if
(
daemon
->
dhcp
)
fclose
(
daemon
->
lease_stream
);
exit
(
0
);
case
SIGCHLD
:
/* See Stevens 5.10 */
while
(
waitpid
(
-
1
,
NULL
,
WNOHANG
)
>
0
)
daemon
->
num_kids
--
;
break
;
}
}
#ifdef HAVE_LINUX_NETWORK
if
(
FD_ISSET
(
daemon
->
netlinkfd
,
&
rset
))
netlink_multicast
(
daemon
);
#endif
...
...
@@ -529,47 +531,34 @@ int main (int argc, char **argv)
if
(
daemon
->
dhcp
&&
FD_ISSET
(
daemon
->
dhcpfd
,
&
rset
))
dhcp_packet
(
daemon
,
now
);
}
syslog
(
LOG_INFO
,
_
(
"exiting on receipt of SIGTERM"
));
if
(
daemon
->
dhcp
)
{
#ifdef HAVE_BROKEN_RTC
lease_update_file
(
daemon
,
1
,
now
);
#endif
fclose
(
daemon
->
lease_stream
);
}
return
0
;
}
static
void
sig_handler
(
int
sig
)
{
if
(
sig
==
SIGTERM
)
sigterm
=
1
;
else
if
(
sig
==
SIGHUP
)
sighup
=
1
;
else
if
(
sig
==
SIGUSR1
)
sigusr1
=
1
;
else
if
(
sig
==
SIGALRM
)
if
(
pid
==
0
)
{
/*
alarm is used to kill children after a fixed time.
*/
if
(
in_child
)
/*
ignore anything other than TERM during startup
*/
if
(
sig
==
SIGTERM
)
exit
(
0
);
else
sigalarm
=
1
;
}
else
if
(
sig
==
SIGCHLD
)
else
if
(
pid
==
getpid
()
)
{
/* See Stevens 5.10 */
while
(
waitpid
(
-
1
,
NULL
,
WNOHANG
)
>
0
)
num_kids
--
;
/* master process */
unsigned
char
sigchr
=
sig
;
int
errsave
=
errno
;
write
(
pipewrite
,
&
sigchr
,
1
);
errno
=
errsave
;
}
else
{
/* alarm is used to kill children after a fixed time. */
if
(
sig
==
SIGALRM
)
exit
(
0
);
}
}
void
clear_cache_and_reload
(
struct
daemon
*
daemon
,
time_t
now
)
void
clear_cache_and_reload
(
struct
daemon
*
daemon
)
{
cache_reload
(
daemon
->
options
,
daemon
->
namebuff
,
daemon
->
domain_suffix
,
daemon
->
addn_hosts
);
if
(
daemon
->
dhcp
)
...
...
@@ -578,7 +567,7 @@ void clear_cache_and_reload(struct daemon *daemon, time_t now)
dhcp_read_ethers
(
daemon
);
dhcp_update_configs
(
daemon
->
dhcp_conf
);
lease_update_from_configs
(
daemon
);
lease_update_file
(
daemon
,
0
,
now
);
lease_update_file
(
daemon
);
lease_update_dns
(
daemon
);
}
}
...
...
@@ -625,30 +614,39 @@ static void check_dns_listeners(struct daemon *daemon, fd_set *set, time_t now)
if
(
FD_ISSET
(
listener
->
tcpfd
,
set
))
{
int
confd
;
struct
in_addr
netmask
,
dst_addr_4
;
while
((
confd
=
accept
(
listener
->
tcpfd
,
NULL
,
NULL
))
==
-
1
&&
errno
==
EINTR
);
if
(
confd
!=
-
1
)
{
struct
irec
*
iface
=
NULL
;
if
(
daemon
->
options
&
OPT_NOWILD
)
iface
=
listener
->
iface
;
else
{
union
mysockaddr
tcp_addr
;
socklen_t
tcp_len
=
sizeof
(
union
mysockaddr
);
/* Check for allowed interfaces when binding the wildcard address:
we do this by looking for an interface with the same address as
the local address of the TCP connection, then looking to see if that's
an allowed interface. As a side effect, we get the netmask of the
interface too, for localisation. */
if
((
num_kids
>=
MAX_PROCS
)
||
(
!
(
daemon
->
options
&
OPT_NOWILD
)
&&
(
getsockname
(
confd
,
(
struct
sockaddr
*
)
&
tcp_addr
,
&
tcp_len
)
==
-
1
||
!
enumerate_interfaces
(
daemon
,
NULL
,
&
tcp_addr
,
&
netmask
))))
/* interface may be new since startup */
if
(
enumerate_interfaces
(
daemon
)
&&
getsockname
(
confd
,
(
struct
sockaddr
*
)
&
tcp_addr
,
&
tcp_len
)
!=
-
1
)
for
(
iface
=
daemon
->
interfaces
;
iface
;
iface
=
iface
->
next
)
if
(
sockaddr_isequal
(
&
iface
->
addr
,
&
tcp_addr
))
break
;
}
if
((
daemon
->
num_kids
>=
MAX_PROCS
)
||
!
iface
)
close
(
confd
);
#ifndef NO_FORK
else
if
(
!
(
daemon
->
options
&
OPT_DEBUG
)
&&
fork
())
{
num_kids
++
;
daemon
->
num_kids
++
;
close
(
confd
);
}
#endif
...
...
@@ -657,18 +655,14 @@ static void check_dns_listeners(struct daemon *daemon, fd_set *set, time_t now)
unsigned
char
*
buff
;
struct
server
*
s
;
int
flags
;
struct
in_addr
dst_addr_4
;
dst_addr_4
.
s_addr
=
0
;
/* Arrange for SIGALARM after CHILD_LIFETIME seconds to
terminate the process. */
if
(
!
(
daemon
->
options
&
OPT_DEBUG
))
{
sigset_t
mask
;
sigemptyset
(
&
mask
);
sigaddset
(
&
mask
,
SIGALRM
);
sigprocmask
(
SIG_UNBLOCK
,
&
mask
,
NULL
);
alarm
(
CHILD_LIFETIME
);
in_child
=
1
;
}
/* start with no upstream connections. */
for
(
s
=
daemon
->
servers
;
s
;
s
=
s
->
next
)
...
...
@@ -681,20 +675,9 @@ static void check_dns_listeners(struct daemon *daemon, fd_set *set, time_t now)
fcntl
(
confd
,
F_SETFL
,
flags
&
~
O_NONBLOCK
);
if
(
listener
->
family
==
AF_INET
)
{
if
(
daemon
->
options
&
OPT_NOWILD
)
{
netmask
=
listener
->
iface
->
netmask
;
dst_addr_4
=
listener
->
iface
->
addr
.
in
.
sin_addr
;
}
else
/* netmask already set by enumerate_interfaces */
dst_addr_4
=
tcp_addr
.
in
.
sin_addr
;
}
else
dst_addr_4
.
s_addr
=
0
;
dst_addr_4
=
iface
->
addr
.
in
.
sin_addr
;
buff
=
tcp_request
(
daemon
,
confd
,
now
,
dst_addr_4
,
netmask
);
buff
=
tcp_request
(
daemon
,
confd
,
now
,
dst_addr_4
,
iface
->
netmask
);
if
(
!
(
daemon
->
options
&
OPT_DEBUG
))
exit
(
0
);
...
...
@@ -711,21 +694,35 @@ static void check_dns_listeners(struct daemon *daemon, fd_set *set, time_t now)
}
}
int
make_icmp_sock
(
void
)
{
int
fd
,
flags
;
int
zeroopt
=
0
;
if
((
fd
=
socket
(
AF_INET
,
SOCK_RAW
,
IPPROTO_ICMP
))
!=
-
1
)
{
if
((
flags
=
fcntl
(
fd
,
F_GETFL
,
0
))
==
-
1
||
fcntl
(
fd
,
F_SETFL
,
flags
|
O_NONBLOCK
)
==
-
1
||
setsockopt
(
fd
,
SOL_SOCKET
,
SO_DONTROUTE
,
&
zeroopt
,
sizeof
(
zeroopt
))
==
-
1
)
{
close
(
fd
);
fd
=
-
1
;
}
}
return
fd
;
}
int
icmp_ping
(
struct
daemon
*
daemon
,
struct
in_addr
addr
)
{
/* Try and get an ICMP echo from a machine.
Note that we can't create the raw socket each time
we do this, since that needs root. Therefore the socket has to hang
around all the time. Since most of the time we won't read the
socket, it will accumulate buffers full of ICMP messages,
wasting memory. To avoid that we set the receive buffer
length to zero except when we're actively pinging. */
/* Try and get an ICMP echo from a machine. */
/* Note that whilst in the three second wait, we check for
(and service) events on the DNS sockets, (so doing that
better not use any resources our caller has in use...)
but we remain deaf to signals or further DHCP packets. */
int
fd
;
struct
sockaddr_in
saddr
;
struct
{
struct
ip
ip
;
...
...
@@ -733,9 +730,18 @@ int icmp_ping(struct daemon *daemon, struct in_addr addr)
}
packet
;
unsigned
short
id
=
rand16
();
unsigned
int
i
,
j
;
int
opt
=
2000
,
gotreply
=
0
;
int
gotreply
=
0
;
time_t
start
,
now
;
#ifdef HAVE_LINUX_NETWORK
if
((
fd
=
make_icmp_sock
())
==
-
1
)
return
0
;
#else
int
opt
=
2000
;
fd
=
daemon
->
dhcp_icmp_fd
;
setsockopt
(
fd
,
SOL_SOCKET
,
SO_RCVBUF
,
&
opt
,
sizeof
(
opt
));
#endif
saddr
.
sin_family
=
AF_INET
;
saddr
.
sin_port
=
0
;
saddr
.
sin_addr
=
addr
;
...
...
@@ -752,13 +758,12 @@ int icmp_ping(struct daemon *daemon, struct in_addr addr)
j
=
(
j
&
0xffff
)
+
(
j
>>
16
);
packet
.
icmp
.
icmp_cksum
=
(
j
==
0xffff
)
?
j
:
~
j
;
setsockopt
(
daemon
->
dhcp_icmp_fd
,
SOL_SOCKET
,
SO_RCVBUF
,
&
opt
,
sizeof
(
opt
));
while
(
sendto
(
daemon
->
dhcp_icmp_fd
,
(
char
*
)
&
packet
.
icmp
,
sizeof
(
struct
icmp
),
0
,
while
(
sendto
(
fd
,
(
char
*
)
&
packet
.
icmp
,
sizeof
(
struct
icmp
),
0
,
(
struct
sockaddr
*
)
&
saddr
,
sizeof
(
saddr
))
==
-
1
&&
retry_send
());
for
(
now
=
start
=
dnsmasq_time
(
daemon
->
uptime_fd
);
difftime
(
now
,
start
)
<
3
.
0
;)
for
(
now
=
start
=
dnsmasq_time
();
difftime
(
now
,
start
)
<
(
float
)
PING_WAIT
;)
{
struct
timeval
tv
;
fd_set
rset
;
...
...
@@ -770,17 +775,17 @@ int icmp_ping(struct daemon *daemon, struct in_addr addr)
tv
.
tv_sec
=
0
;
FD_ZERO
(
&
rset
);
FD_SET
(
daemon
->
dhcp_icmp_
fd
,
&
rset
);
maxfd
=
set_dns_listeners
(
daemon
,
&
rset
,
daemon
->
dhcp_icmp_
fd
);
FD_SET
(
fd
,
&
rset
);
maxfd
=
set_dns_listeners
(
daemon
,
&
rset
,
fd
);
if
(
select
(
maxfd
+
1
,
&
rset
,
NULL
,
NULL
,
&
tv
)
<
0
)
FD_ZERO
(
&
rset
);
now
=
dnsmasq_time
(
daemon
->
uptime_fd
);
now
=
dnsmasq_time
();
check_dns_listeners
(
daemon
,
&
rset
,
now
);
if
(
FD_ISSET
(
daemon
->
dhcp_icmp_
fd
,
&
rset
)
&&
recvfrom
(
daemon
->
dhcp_icmp_
fd
,
&
packet
,
sizeof
(
packet
),
0
,
if
(
FD_ISSET
(
fd
,
&
rset
)
&&
recvfrom
(
fd
,
&
packet
,
sizeof
(
packet
),
0
,
(
struct
sockaddr
*
)
&
faddr
,
&
len
)
==
sizeof
(
packet
)
&&
saddr
.
sin_addr
.
s_addr
==
faddr
.
sin_addr
.
s_addr
&&
packet
.
icmp
.
icmp_type
==
ICMP_ECHOREPLY
&&
...
...
@@ -792,8 +797,12 @@ int icmp_ping(struct daemon *daemon, struct in_addr addr)
}
}
#ifdef HAVE_LINUX_NETWORK
close
(
fd
);
#else
opt
=
1
;
setsockopt
(
daemon
->
dhcp_icmp_fd
,
SOL_SOCKET
,
SO_RCVBUF
,
&
opt
,
sizeof
(
opt
));
setsockopt
(
fd
,
SOL_SOCKET
,
SO_RCVBUF
,
&
opt
,
sizeof
(
opt
));
#endif
return
gotreply
;
}
...
...
src/dnsmasq.h
View file @
5e9e0efb
...
...
@@ -10,17 +10,8 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#define COPYRIGHT "Copyright (C) 2000-2006 Simon Kelley"
#ifdef __linux__
/* for pselect.... */
# define _XOPEN_SOURCE 600
/* but then DNS headers don't compile without.... */
#define _BSD_SOURCE
#endif
/* get these before config.h for IPv6 stuff... */
#include <sys/types.h>
#include <netinet/in.h>
...
...
@@ -53,9 +44,6 @@
#include <sys/ioctl.h>
#include <sys/select.h>
#include <sys/wait.h>
#if defined(__sun) || defined(__sun__)
# include <sys/sockio.h>
#endif
#include <sys/time.h>
#include <limits.h>
#include <net/if.h>
...
...
@@ -80,13 +68,18 @@
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/ip_icmp.h>
#i
fdef HAVE_BPF
#
include <net/bpf.h>
#i
nclude <sys/uio.h>
#
ifndef HAVE_LINUX_NETWORK
# include <net/if_dl.h>
#else
# include <netpacket/packet.h>
#endif
#include <sys/uio.h>
#ifdef HAVE_LINUX_NETWORK
#include <linux/capability.h>
/* There doesn't seem to be a universally-available
userpace header for this. */
extern
int
capset
(
cap_user_header_t
header
,
cap_user_data_t
data
);
#include <sys/prctl.h>
#endif
/* Min buffer size: we check after adding each record, so there must be
memory for the largest packet, and the largest record so the
...
...
@@ -116,6 +109,7 @@
#define OPT_LOCALISE 262144
#define OPT_DBUS 524288
#define OPT_BOOTP_DYNAMIC 1048576
#define OPT_NO_PING 2097152
struct
all_addr
{
union
{
...
...
@@ -296,6 +290,9 @@ struct dhcp_lease {
char
*
hostname
,
*
fqdn
;
/* name from client-hostname option or config */
int
auth_name
;
/* hostname came from config, not from client */
time_t
expires
;
/* lease expiry */
#ifdef HAVE_BROKEN_RTC
unsigned
int
length
;
#endif
int
hwaddr_len
,
hwaddr_type
;
unsigned
char
hwaddr
[
DHCP_CHADDR_MAX
];
struct
in_addr
addr
;
...
...
@@ -385,22 +382,13 @@ typedef unsigned short u16;
typedef
unsigned
int
u32
;
struct
udp_dhcp_packet
{
struct
ip
ip
;
struct
udphdr
{
u16
uh_sport
;
/* source port */
u16
uh_dport
;
/* destination port */
u16
uh_ulen
;
/* udp length */
u16
uh_sum
;
/* udp checksum */
}
udp
;
struct
dhcp_packet
{
struct
dhcp_packet
{
u8
op
,
htype
,
hlen
,
hops
;
u32
xid
;
u16
secs
,
flags
;
struct
in_addr
ciaddr
,
yiaddr
,
siaddr
,
giaddr
;
u8
chaddr
[
DHCP_CHADDR_MAX
],
sname
[
64
],
file
[
128
];
u8
options
[
312
];
}
data
;
};
struct
ping_result
{
...
...
@@ -452,14 +440,16 @@ struct daemon {
struct
server
*
last_server
;
struct
server
*
srv_save
;
/* Used for resend on DoD */
size_t
packet_len
;
/* " " */
int
uptime_fd
;
int
num_kids
;
/* DHCP state */
int
dhcpfd
,
dhcp_raw_fd
,
dhcp_icmp_fd
;
#ifdef HAVE_
RTNETLIN
K
int
dhcpfd
;
#ifdef HAVE_
LINUX_NETWOR
K
int
netlinkfd
;
#else
int
dhcp_raw_fd
,
dhcp_icmp_fd
;
#endif
struct
udp_dhcp_packet
*
dhcp_packet
;
struct
iovec
dhcp_packet
;
char
*
dhcp_buff
,
*
dhcp_buff2
;
struct
ping_result
*
ping_results
;
FILE
*
lease_stream
;
...
...
@@ -489,7 +479,7 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
void
cache_reload
(
int
opts
,
char
*
buff
,
char
*
domain_suffix
,
struct
hostsfile
*
addn_hosts
);
void
cache_add_dhcp_entry
(
struct
daemon
*
daemon
,
char
*
host_name
,
struct
in_addr
*
host_address
,
time_t
ttd
);
void
cache_unhash_dhcp
(
void
);
void
dump_cache
(
struct
daemon
*
daemon
);
void
dump_cache
(
struct
daemon
*
daemon
,
time_t
now
);
char
*
cache_get_name
(
struct
crec
*
crecp
);
/* rfc1035.c */
...
...
@@ -522,14 +512,16 @@ void *safe_malloc(size_t size);
int
sa_len
(
union
mysockaddr
*
addr
);
int
sockaddr_isequal
(
union
mysockaddr
*
s1
,
union
mysockaddr
*
s2
);
int
hostname_isequal
(
char
*
a
,
char
*
b
);
time_t
dnsmasq_time
(
int
f
d
);
time_t
dnsmasq_time
(
voi
d
);
int
is_same_net
(
struct
in_addr
a
,
struct
in_addr
b
,
struct
in_addr
mask
);
int
retry_send
(
void
);
void
prettyprint_time
(
char
*
buf
,
unsigned
int
t
);
int
prettyprint_addr
(
union
mysockaddr
*
addr
,
char
*
buf
);
int
parse_hex
(
char
*
in
,
unsigned
char
*
out
,
int
maxlen
,
unsigned
int
*
wildcard_mask
,
int
*
mac_type
);
int
memcmp_masked
(
unsigned
char
*
a
,
unsigned
char
*
b
,
int
len
,
unsigned
int
mask
);
int
expand_buf
(
struct
iovec
*
iov
,
size_t
size
);
/* option.c */
struct
daemon
*
read_opts
(
int
argc
,
char
**
argv
,
char
*
compile_opts
);
...
...
@@ -544,10 +536,11 @@ unsigned char *tcp_request(struct daemon *daemon, int confd, time_t now,
struct
serverfd
*
allocate_sfd
(
union
mysockaddr
*
addr
,
struct
serverfd
**
sfds
);
void
reload_servers
(
char
*
fname
,
struct
daemon
*
daemon
);
void
check_servers
(
struct
daemon
*
daemon
);
int
enumerate_interfaces
(
struct
daemon
*
daemon
,
struct
irec
**
chainp
,
union
mysockaddr
*
test_addrp
,
struct
in_addr
*
netmaskp
);
int
enumerate_interfaces
(
struct
daemon
*
daemon
);
struct
listener
*
create_wildcard_listeners
(
int
port
);
struct
listener
*
create_bound_listeners
(
struct
irec
*
interfaces
,
int
port
);
struct
listener
*
create_bound_listeners
(
struct
daemon
*
daemon
);
int
iface_check
(
struct
daemon
*
daemon
,
int
family
,
struct
all_addr
*
addr
,
char
*
name
);
/* dhcp.c */
void
dhcp_init
(
struct
daemon
*
daemon
);
...
...
@@ -569,13 +562,9 @@ void dhcp_read_ethers(struct daemon *daemon);
struct
dhcp_config
*
config_find_by_address
(
struct
dhcp_config
*
configs
,
struct
in_addr
addr
);
char
*
strip_hostname
(
struct
daemon
*
daemon
,
char
*
hostname
);
char
*
host_from_dns
(
struct
daemon
*
daemon
,
struct
in_addr
addr
);
struct
dhcp_context
*
complete_context
(
struct
daemon
*
daemon
,
struct
in_addr
local
,
struct
dhcp_context
*
current
,
struct
in_addr
netmask
,
struct
in_addr
broadcast
,
struct
in_addr
relay
,
struct
in_addr
primary
);
/* lease.c */
void
lease_update_file
(
struct
daemon
*
daemon
,
int
force
,
time_t
now
);
void
lease_update_file
(
struct
daemon
*
daemon
);
void
lease_update_dns
(
struct
daemon
*
daemon
);
void
lease_init
(
struct
daemon
*
daemon
,
time_t
now
);
struct
dhcp_lease
*
lease_allocate
(
unsigned
char
*
hwaddr
,
unsigned
char
*
clid
,
...
...
@@ -584,7 +573,7 @@ int lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
unsigned
char
*
clid
,
int
hw_len
,
int
hw_type
,
int
clid_len
);
void
lease_set_hostname
(
struct
dhcp_lease
*
lease
,
char
*
name
,
char
*
suffix
,
int
auth
);
void
lease_set_expires
(
struct
dhcp_lease
*
lease
,
time_t
exp
);
void
lease_set_expires
(
struct
dhcp_lease
*
lease
,
unsigned
int
len
,
time_t
now
);
struct
dhcp_lease
*
lease_find_by_client
(
unsigned
char
*
hwaddr
,
int
hw_len
,
int
hw_type
,
unsigned
char
*
clid
,
int
clid_len
);
struct
dhcp_lease
*
lease_find_by_addr
(
struct
in_addr
addr
);
...
...
@@ -595,8 +584,9 @@ void lease_update_from_configs(struct daemon *daemon);
size_t
dhcp_reply
(
struct
daemon
*
daemon
,
struct
dhcp_context
*
context
,
char
*
iface_name
,
size_t
sz
,
time_t
now
,
int
unicast_dest
);
/* dnsmasq.c */
int
make_icmp_sock
(
void
);
int
icmp_ping
(
struct
daemon
*
daemon
,
struct
in_addr
addr
);
void
clear_cache_and_reload
(
struct
daemon
*
daemon
,
time_t
now
);
void
clear_cache_and_reload
(
struct
daemon
*
daemon
);
/* isc.c */
#ifdef HAVE_ISC_READER
...
...
@@ -604,12 +594,22 @@ void load_dhcp(struct daemon *daemon, time_t now);
#endif
/* netlink.c */
#ifdef HAVE_
RTNETLIN
K
#ifdef HAVE_
LINUX_NETWOR
K
void
netlink_init
(
struct
daemon
*
daemon
);
int
netlink_process
(
struct
daemon
*
daemon
,
int
index
,
struct
in_addr
relay
,
struct
in_addr
primary
,
struct
dhcp_context
**
retp
);
int
iface_enumerate
(
struct
daemon
*
daemon
,
void
*
parm
,
int
(
*
ipv4_callback
)(),
int
(
*
ipv6_callback
)());
void
netlink_multicast
(
struct
daemon
*
daemon
);
void
arp_inject
(
int
fd
,
struct
in_addr
addr
,
int
iface
,
unsigned
char
*
mac
,
unsigned
int
mac_len
);
#endif
/* bpf.c */
#ifndef HAVE_LINUX_NETWORK
void
init_bpf
(
struct
daemon
*
daemon
);
void
send_via_bpf
(
struct
daemon
*
daemon
,
struct
dhcp_packet
*
mess
,
size_t
len
,
struct
in_addr
iface_addr
,
struct
ifreq
*
ifr
);
int
iface_enumerate
(
struct
daemon
*
daemon
,
void
*
parm
,
int
(
*
ipv4_callback
)(),
int
(
*
ipv6_callback
)());
#endif
/* dbus.c */
...
...
src/forward.c
View file @
5e9e0efb
...
...
@@ -10,8 +10,6 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#include "dnsmasq.h"
static
struct
frec
*
frec_list
;
...
...
@@ -44,7 +42,7 @@ static void send_from(int fd, int nowild, char *packet, size_t len,
struct
iovec
iov
[
1
];
union
{
struct
cmsghdr
align
;
/* this ensures alignment */
#if defined(
IP_PKTINFO
)
#if defined(
HAVE_LINUX_NETWORK
)
char
control
[
CMSG_SPACE
(
sizeof
(
struct
in_pktinfo
))];
#elif defined(IP_SENDSRCADDR)
char
control
[
CMSG_SPACE
(
sizeof
(
struct
in_addr
))];
...
...
@@ -74,7 +72,7 @@ static void send_from(int fd, int nowild, char *packet, size_t len,
if
(
to
->
sa
.
sa_family
==
AF_INET
)
{
#if defined(
IP_PKTINFO
)
#if defined(
HAVE_LINUX_NETWORK
)
struct
in_pktinfo
*
pkt
=
(
struct
in_pktinfo
*
)
CMSG_DATA
(
cmptr
);
pkt
->
ipi_ifindex
=
0
;
pkt
->
ipi_spec_dst
=
source
->
addr
.
addr4
;
...
...
@@ -448,7 +446,7 @@ void reply_query(struct serverfd *sfd, struct daemon *daemon, time_t now)
serveraddr
.
sa
.
sa_family
=
sfd
->
source_addr
.
sa
.
sa_family
;
#ifdef HAVE_IPV6
if
(
serveraddr
.
sa
.
sa_family
==
AF_INET6
)
serveraddr
.
in6
.
sin6_flowinfo
=
htonl
(
0
)
;
serveraddr
.
in6
.
sin6_flowinfo
=
0
;
#endif
header
=
(
HEADER
*
)
daemon
->
packet
;
...
...
@@ -522,7 +520,6 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
HEADER
*
header
=
(
HEADER
*
)
daemon
->
packet
;
union
mysockaddr
source_addr
;
unsigned
short
type
;
struct
iname
*
tmp
;
struct
all_addr
dst_addr
;
struct
in_addr
netmask
,
dst_addr_4
;
size_t
m
;
...
...
@@ -536,7 +533,7 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
#ifdef HAVE_IPV6
char
control6
[
CMSG_SPACE
(
sizeof
(
struct
in6_pktinfo
))];
#endif
#if defined(
IP_PKTINFO
)
#if defined(
HAVE_LINUX_NETWORK
)
char
control
[
CMSG_SPACE
(
sizeof
(
struct
in_pktinfo
))];
#elif defined(IP_RECVDSTADDR)
char
control
[
CMSG_SPACE
(
sizeof
(
struct
in_addr
))
+
...
...
@@ -572,13 +569,15 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
if
((
n
=
recvmsg
(
listen
->
fd
,
&
msg
,
0
))
==
-
1
)
return
;
if
(
n
<
(
int
)
sizeof
(
HEADER
)
||
header
->
qr
)
if
(
n
<
(
int
)
sizeof
(
HEADER
)
||
(
msg
.
msg_flags
&
MSG_TRUNC
)
||
header
->
qr
)
return
;
source_addr
.
sa
.
sa_family
=
listen
->
family
;
#ifdef HAVE_IPV6
if
(
listen
->
family
==
AF_INET6
)
source_addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
)
;
source_addr
.
in6
.
sin6_flowinfo
=
0
;
#endif
if
(
!
(
daemon
->
options
&
OPT_NOWILD
))
...
...
@@ -588,7 +587,7 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
if
(
msg
.
msg_controllen
<
sizeof
(
struct
cmsghdr
))
return
;
#if defined(
IP_PKTINFO
)
#if defined(
HAVE_LINUX_NETWORK
)
if
(
listen
->
family
==
AF_INET
)
for
(
cmptr
=
CMSG_FIRSTHDR
(
&
msg
);
cmptr
;
cmptr
=
CMSG_NXTHDR
(
&
msg
,
cmptr
))
if
(
cmptr
->
cmsg_level
==
SOL_IP
&&
cmptr
->
cmsg_type
==
IP_PKTINFO
)
...
...
@@ -643,34 +642,9 @@ void receive_query(struct listener *listen, struct daemon *daemon, time_t now)
netmask
=
((
struct
sockaddr_in
*
)
&
ifr
.
ifr_addr
)
->
sin_addr
;
}
for
(
tmp
=
daemon
->
if_except
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
name
&&
(
strcmp
(
tmp
->
name
,
ifr
.
ifr_name
)
==
0
))
return
;
if
(
daemon
->
if_names
||
daemon
->
if_addrs
)
{
for
(
tmp
=
daemon
->
if_names
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
name
&&
(
strcmp
(
tmp
->
name
,
ifr
.
ifr_name
)
==
0
))
break
;
if
(
!
tmp
)
for
(
tmp
=
daemon
->
if_addrs
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
addr
.
sa
.
sa_family
==
listen
->
family
)
{
if
(
tmp
->
addr
.
sa
.
sa_family
==
AF_INET
&&
tmp
->
addr
.
in
.
sin_addr
.
s_addr
==
dst_addr
.
addr
.
addr4
.
s_addr
)
break
;
#ifdef HAVE_IPV6
else
if
(
tmp
->
addr
.
sa
.
sa_family
==
AF_INET6
&&
memcmp
(
&
tmp
->
addr
.
in6
.
sin6_addr
,
&
dst_addr
.
addr
.
addr6
,
sizeof
(
struct
in6_addr
))
==
0
)
break
;
#endif
}
if
(
!
tmp
)
if
(
!
iface_check
(
daemon
,
listen
->
family
,
&
dst_addr
,
ifr
.
ifr_name
))
return
;
}
}
if
(
extract_request
(
header
,
(
size_t
)
n
,
daemon
->
namebuff
,
&
type
))
{
...
...
@@ -709,7 +683,7 @@ static int read_write(int fd, unsigned char *packet, int size, int rw)
return
0
;
else
if
(
n
==
-
1
)
{
if
(
retry_send
()
)
if
(
errno
==
EINTR
)
goto
retry
;
else
return
0
;
...
...
@@ -920,6 +894,7 @@ static struct frec *get_new_frec(time_t now)
{
f
->
next
=
frec_list
;
f
->
time
=
now
;
f
->
new_id
=
0
;
frec_list
=
f
;
}
return
f
;
/* OK if malloc fails and this is NULL */
...
...
src/isc.c
View file @
5e9e0efb
...
...
@@ -17,6 +17,8 @@
#ifdef HAVE_ISC_READER
#define MAXTOK 50
struct
isc_lease
{
char
*
name
,
*
fqdn
;
time_t
expires
;
...
...
src/lease.c
View file @
5e9e0efb
...
...
@@ -10,26 +10,22 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#include "dnsmasq.h"
static
struct
dhcp_lease
*
leases
;
static
int
dns_dirty
;
static
enum
{
no
,
yes
,
force
}
file_dirty
;
static
int
leases_left
;
static
int
dns_dirty
,
file_dirty
,
leases_left
;
void
lease_init
(
struct
daemon
*
daemon
,
time_t
now
)
{
unsigned
int
a0
,
a1
,
a2
,
a3
;
unsigned
long
ei
;
time_t
expires
;
unsigned
char
hwaddr
[
DHCP_CHADDR_MAX
];
struct
in_addr
addr
;
struct
dhcp_lease
*
lease
;
int
clid_len
=
0
,
hw_len
,
hw_type
;
int
has_old
=
0
;
dns_dirty
=
1
;
file_dirty
=
0
;
leases
=
NULL
;
leases_left
=
daemon
->
dhcp_max
;
...
...
@@ -46,26 +42,21 @@ void lease_init(struct daemon *daemon, time_t now)
&
ei
,
daemon
->
dhcp_buff2
,
&
a0
,
&
a1
,
&
a2
,
&
a3
,
daemon
->
dhcp_buff
,
daemon
->
packet
)
==
8
)
{
#ifdef HAVE_BROKEN_RTC
if
(
ei
)
expires
=
(
time_t
)
ei
+
now
;
else
expires
=
(
time_t
)
0
;
#else
#ifndef HAVE_BROKEN_RTC
/* strictly time_t is opaque, but this hack should work on all sane systems,
even when sizeof(time_t) == 8 */
expires
=
(
time_t
)
ei
;
time_t
expires
=
(
time_t
)
ei
;
if
(
ei
!=
0
&&
difftime
(
now
,
expires
)
>
0
)
{
has_old
=
1
;
file_dirty
=
1
;
continue
;
/* expired */
}
#endif
hw_len
=
parse_hex
(
daemon
->
dhcp_buff2
,
hwaddr
,
DHCP_CHADDR_MAX
,
NULL
,
&
hw_type
);
/* For backwards compatibility, no explict MAC address type means ether. */
if
(
hw_type
==
0
)
if
(
hw_type
==
0
&&
hw_len
!=
0
)
hw_type
=
ARPHRD_ETHER
;
addr
.
s_addr
=
htonl
((
a0
<<
24
)
+
(
a1
<<
16
)
+
(
a2
<<
8
)
+
a3
);
...
...
@@ -79,14 +70,19 @@ void lease_init(struct daemon *daemon, time_t now)
if
(
!
(
lease
=
lease_allocate
(
hwaddr
,
(
unsigned
char
*
)
daemon
->
packet
,
hw_len
,
hw_type
,
clid_len
,
addr
)))
die
(
_
(
"too many stored leases"
),
NULL
);
#ifdef HAVE_BROKEN_RTC
if
(
ei
!=
0
)
lease
->
expires
=
(
time_t
)
ei
+
now
;
else
lease
->
expires
=
(
time_t
)
0
;
lease
->
length
=
ei
;
#else
lease
->
expires
=
expires
;
#endif
if
(
strcmp
(
daemon
->
dhcp_buff
,
"*"
)
!=
0
)
lease_set_hostname
(
lease
,
daemon
->
dhcp_buff
,
daemon
->
domain_suffix
,
0
);
}
dns_dirty
=
1
;
file_dirty
=
has_old
?
yes
:
no
;
}
void
lease_update_from_configs
(
struct
daemon
*
daemon
)
...
...
@@ -107,47 +103,43 @@ void lease_update_from_configs(struct daemon *daemon)
lease_set_hostname
(
lease
,
name
,
daemon
->
domain_suffix
,
1
);
/* updates auth flag only */
}
void
lease_update_file
(
struct
daemon
*
daemon
,
int
always
,
time_t
now
)
void
lease_update_file
(
struct
daemon
*
daemon
)
{
struct
dhcp_lease
*
lease
;
int
i
=
always
;
/* avoid warning */
unsigned
long
expires
;
char
*
mess
;
int
i
;
#ifdef HAVE_BROKEN_RTC
if
(
always
||
file_dirty
==
force
)
{
lease_prune
(
NULL
,
now
);
#else
if
(
file_dirty
!=
no
)
if
(
file_dirty
!=
0
)
{
#endif
errno
=
0
;
rewind
(
daemon
->
lease_stream
);
if
(
errno
!=
0
||
ftruncate
(
fileno
(
daemon
->
lease_stream
),
0
)
!=
0
)
goto
write_err
;
{
write_err:
syslog
(
LOG_ERR
,
_
(
"failed to write %s: %m (retry in %ds)"
),
daemon
->
lease_file
,
LEASE_RETRY
);
alarm
(
LEASE_RETRY
);
return
;
}
for
(
lease
=
leases
;
lease
;
lease
=
lease
->
next
)
{
#ifdef HAVE_BROKEN_RTC
if
(
lease
->
expires
)
expires
=
(
unsigned
long
)
difftime
(
lease
->
expires
,
now
);
else
expires
=
0
;
if
(
fprintf
(
daemon
->
lease_stream
,
"%u "
,
lease
->
length
)
<
0
)
goto
write_err
;
#else
expires
=
now
;
/* eliminate warning */
expires
=
(
unsigned
long
)
lease
->
expires
;
#endif
if
(
fprintf
(
daemon
->
lease_stream
,
"%lu "
,
expires
)
<
0
)
if
(
fprintf
(
daemon
->
lease_stream
,
"%lu "
,
(
unsigned
long
)
lease
->
expires
)
<
0
)
goto
write_err
;
if
(
lease
->
hwaddr_type
!=
ARPHRD_ETHER
&&
#endif
if
((
lease
->
hwaddr_type
!=
ARPHRD_ETHER
||
lease
->
hwaddr_len
==
0
)
&&
fprintf
(
daemon
->
lease_stream
,
"%.2x-"
,
lease
->
hwaddr_type
)
<
0
)
goto
write_err
;
for
(
i
=
0
;
i
<
lease
->
hwaddr_len
-
1
;
i
++
)
if
(
fprintf
(
daemon
->
lease_stream
,
"%.2x:"
,
lease
->
hwaddr
[
i
])
<
0
)
goto
write_err
;
for
(
i
=
0
;
i
<
lease
->
hwaddr_len
;
i
++
)
{
if
(
fprintf
(
daemon
->
lease_stream
,
"%.2x"
,
lease
->
hwaddr
[
i
])
<
0
)
goto
write_err
;
if
(
i
!=
lease
->
hwaddr_len
-
1
&&
fprintf
(
daemon
->
lease_stream
,
":"
)
<
0
)
goto
write_err
;
}
if
(
fprintf
(
daemon
->
lease_stream
,
" %s %s "
,
inet_ntoa
(
lease
->
addr
),
lease
->
hostname
&&
strlen
(
lease
->
hostname
)
!=
0
?
lease
->
hostname
:
"*"
)
<
0
)
goto
write_err
;
...
...
@@ -170,19 +162,8 @@ void lease_update_file(struct daemon *daemon, int always, time_t now)
goto
write_err
;
if
(
fsync
(
fileno
(
daemon
->
lease_stream
))
<
0
)
goto
write_err
;
file_dirty
=
no
;
file_dirty
=
0
;
}
return
;
write_err:
mess
=
_
(
"failed to write"
);
#ifdef HAVE_BROKEN_RTC
syslog
(
LOG_ERR
,
"%s %s: %m"
,
mess
,
daemon
->
lease_file
);
#else
syslog
(
LOG_ERR
,
"%s %s: %m (retry in %ds)"
,
mess
,
daemon
->
lease_file
,
LEASE_RETRY
);
alarm
(
LEASE_RETRY
);
#endif
}
void
lease_update_dns
(
struct
daemon
*
daemon
)
...
...
@@ -212,7 +193,7 @@ void lease_prune(struct dhcp_lease *target, time_t now)
tmp
=
lease
->
next
;
if
((
lease
->
expires
!=
0
&&
difftime
(
now
,
lease
->
expires
)
>
0
)
||
lease
==
target
)
{
file_dirty
=
yes
;
file_dirty
=
1
;
*
up
=
lease
->
next
;
/* unlink */
if
(
lease
->
hostname
)
...
...
@@ -246,6 +227,7 @@ struct dhcp_lease *lease_find_by_client(unsigned char *hwaddr, int hw_len, int h
for
(
lease
=
leases
;
lease
;
lease
=
lease
->
next
)
if
((
!
lease
->
clid
||
!
clid
)
&&
hw_len
!=
0
&&
lease
->
hwaddr_len
==
hw_len
&&
lease
->
hwaddr_type
==
hw_type
&&
memcmp
(
hwaddr
,
lease
->
hwaddr
,
hw_len
)
==
0
)
...
...
@@ -277,7 +259,12 @@ struct dhcp_lease *lease_allocate(unsigned char *hwaddr, unsigned char *clid,
lease
->
hostname
=
lease
->
fqdn
=
NULL
;
lease
->
addr
=
addr
;
memset
(
lease
->
hwaddr
,
0
,
DHCP_CHADDR_MAX
);
lease
->
hwaddr_len
=
0
;
lease
->
hwaddr_type
=
0
;
lease
->
expires
=
1
;
#ifdef HAVE_BROKEN_RTC
lease
->
length
=
0xffffffff
;
/* illegal value */
#endif
if
(
!
lease_set_hwaddr
(
lease
,
hwaddr
,
clid
,
hw_len
,
hw_type
,
clid_len
))
{
...
...
@@ -288,30 +275,53 @@ struct dhcp_lease *lease_allocate(unsigned char *hwaddr, unsigned char *clid,
lease
->
next
=
leases
;
leases
=
lease
;
file_dirty
=
force
;
file_dirty
=
1
;
leases_left
--
;
return
lease
;
}
void
lease_set_expires
(
struct
dhcp_lease
*
lease
,
time_t
exp
)
void
lease_set_expires
(
struct
dhcp_lease
*
lease
,
unsigned
int
len
,
time_t
now
)
{
time_t
exp
=
now
+
(
time_t
)
len
;
if
(
len
==
0xffffffff
)
{
exp
=
0
;
len
=
0
;
}
if
(
exp
!=
lease
->
expires
)
{
file_dirty
=
yes
;
dns_dirty
=
1
;
}
lease
->
expires
=
exp
;
#ifndef HAVE_BROKEN_RTC
file_dirty
=
1
;
#endif
}
#ifdef HAVE_BROKEN_RTC
if
(
len
!=
lease
->
length
)
{
lease
->
length
=
len
;
file_dirty
=
1
;
}
#endif
}
int
lease_set_hwaddr
(
struct
dhcp_lease
*
lease
,
unsigned
char
*
hwaddr
,
unsigned
char
*
clid
,
int
hw_len
,
int
hw_type
,
int
clid_len
)
{
/* must have some sort of unique-id */
if
(
hw_len
==
0
&&
(
clid_len
==
0
||
!
clid
))
return
0
;
if
(
hw_len
!=
lease
->
hwaddr_len
||
hw_type
!=
lease
->
hwaddr_type
||
hw_len
==
0
||
memcmp
(
lease
->
hwaddr
,
hwaddr
,
hw_len
)
!=
0
)
{
file_dirty
=
force
;
file_dirty
=
1
;
memcpy
(
lease
->
hwaddr
,
hwaddr
,
hw_len
);
lease
->
hwaddr_len
=
hw_len
;
lease
->
hwaddr_type
=
hw_type
;
...
...
@@ -327,14 +337,14 @@ int lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
if
(
lease
->
clid_len
!=
clid_len
)
{
file_dirty
=
force
;
file_dirty
=
1
;
if
(
lease
->
clid
)
free
(
lease
->
clid
);
if
(
!
(
lease
->
clid
=
malloc
(
clid_len
)))
return
0
;
}
else
if
(
memcmp
(
lease
->
clid
,
clid
,
clid_len
)
!=
0
)
file_dirty
=
force
;
file_dirty
=
1
;
lease
->
clid_len
=
clid_len
;
memcpy
(
lease
->
clid
,
clid
,
clid_len
);
...
...
@@ -399,7 +409,7 @@ void lease_set_hostname(struct dhcp_lease *lease, char *name, char *suffix, int
lease
->
fqdn
=
new_fqdn
;
lease
->
auth_name
=
auth
;
file_dirty
=
force
;
file_dirty
=
1
;
dns_dirty
=
1
;
}
...
...
src/netlink.c
View file @
5e9e0efb
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
/* dnsmasq is Copyright (c) 2000-2006 Simon Kelley
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -12,36 +12,36 @@
#include "dnsmasq.h"
#ifdef HAVE_
RTNETLIN
K
#ifdef HAVE_
LINUX_NETWOR
K
#include <linux/types.h>
#include <linux/netlink.h>
#include <linux/rtnetlink.h>
static
struct
iovec
iov
[
1
];
static
struct
iovec
iov
;
static
void
nl_err
(
struct
nlmsghdr
*
h
);
static
void
nl_routechange
(
struct
daemon
*
daemon
,
struct
nlmsghdr
*
h
);
void
netlink_init
(
struct
daemon
*
daemon
)
{
struct
sockaddr_nl
addr
;
daemon
->
netlinkfd
=
socket
(
AF_NETLINK
,
SOCK_RAW
,
NETLINK_ROUTE
);
if
(
daemon
->
netlinkfd
<
0
)
return
;
/* no kernel support */
addr
.
nl_family
=
AF_NETLINK
;
addr
.
nl_pad
=
0
;
addr
.
nl_pid
=
getpid
();
addr
.
nl_pid
=
0
;
/* autobind */
#ifdef HAVE_IPV6
addr
.
nl_groups
=
RTMGRP_IPV4_
IFADDR
|
RTMGRP_IPV6_IFADDR
|
RTMGRP_IPV4_
ROUTE
|
RTMGRP_IPV6_ROUTE
;
addr
.
nl_groups
=
RTMGRP_IPV4_ROUTE
|
RTMGRP_IPV6_ROUTE
;
#else
addr
.
nl_groups
=
RTMGRP_IPV4_
IFADDR
|
RTMGRP_IPV4_
ROUTE
;
addr
.
nl_groups
=
RTMGRP_IPV4_ROUTE
;
#endif
if
(
bind
(
daemon
->
netlinkfd
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
))
<
0
)
die
(
_
(
"cannot bind netlink socket: %s"
),
NULL
);
if
((
daemon
->
netlinkfd
=
socket
(
AF_NETLINK
,
SOCK_RAW
,
NETLINK_ROUTE
))
==
-
1
||
bind
(
daemon
->
netlinkfd
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
))
==
-
1
)
die
(
_
(
"cannot create RTnetlink socket: %s"
),
NULL
);
iov
[
0
]
.
iov_len
=
200
;
iov
[
0
].
iov_base
=
safe_malloc
(
iov
[
0
]
.
iov_len
);
iov
.
iov_len
=
200
;
iov
.
iov_base
=
safe_malloc
(
iov
.
iov_len
);
}
static
ssize_t
netlink_recv
(
struct
daemon
*
daemon
)
...
...
@@ -51,101 +51,100 @@ static ssize_t netlink_recv(struct daemon *daemon)
msg
.
msg_control
=
NULL
;
msg
.
msg_controllen
=
0
;
msg
.
msg_flags
=
0
;
msg
.
msg_name
=
NULL
;
msg
.
msg_namelen
=
0
;
msg
.
msg_iov
=
iov
;
msg
.
msg_iov
=
&
iov
;
msg
.
msg_iovlen
=
1
;
retry:
while
((
rc
=
recvmsg
(
daemon
->
netlinkfd
,
&
msg
,
MSG_PEEK
))
==
-
1
&&
retry_send
());
while
(
1
)
{
msg
.
msg_flags
=
0
;
while
((
rc
=
recvmsg
(
daemon
->
netlinkfd
,
&
msg
,
MSG_PEEK
))
==
-
1
&&
errno
==
EINTR
);
if
(
rc
==
-
1
)
/* 2.2.x doesn't suport MSG_PEEK at all, returning EOPNOTSUPP, so we just grab a
big buffer and pray in that case. */
if
(
rc
==
-
1
&&
errno
==
EOPNOTSUPP
)
{
if
(
!
expand_buf
(
&
iov
,
2000
))
return
-
1
;
break
;
}
if
(
msg
.
msg_flags
&
MSG_TRUNC
)
{
size_t
newsz
=
iov
[
0
].
iov_len
+
100
;
void
*
new
=
realloc
(
iov
[
0
].
iov_base
,
newsz
);
if
(
!
new
)
if
(
rc
==
-
1
||
!
(
msg
.
msg_flags
&
MSG_TRUNC
))
break
;
if
(
!
expand_buf
(
&
iov
,
iov
.
iov_len
+
100
))
return
-
1
;
iov
[
0
].
iov_len
=
newsz
;
iov
[
0
].
iov_base
=
new
;
goto
retry
;
}
while
((
rc
=
recvmsg
(
daemon
->
netlinkfd
,
&
msg
,
0
))
==
-
1
&&
retry_send
());
/* finally, read it for real */
while
((
rc
=
recvmsg
(
daemon
->
netlinkfd
,
&
msg
,
0
))
==
-
1
&&
errno
==
EINTR
);
return
rc
;
}
int
netlink_process
(
struct
daemon
*
daemon
,
int
index
,
struct
in_addr
relay
,
struct
in_addr
primary
,
struct
dhcp_context
**
retp
)
int
iface_enumerate
(
struct
daemon
*
daemon
,
void
*
parm
,
int
(
*
ipv4_callback
)(),
int
(
*
ipv6_callback
)())
{
struct
sockaddr_nl
addr
;
struct
nlmsghdr
*
h
;
int
found_primary
=
0
;
ssize_t
len
;
struct
dhcp_context
*
ret
=
NULL
;
static
unsigned
int
seq
=
0
;
int
family
=
AF_INET
;
struct
{
struct
nlmsghdr
nlh
;
struct
rtgenmsg
g
;
}
req
;
if
(
daemon
->
netlinkfd
==
-
1
)
return
0
;
addr
.
nl_family
=
AF_NETLINK
;
addr
.
nl_pad
=
0
;
addr
.
nl_groups
=
0
;
addr
.
nl_pid
=
0
;
/* address to kernel */
again:
req
.
nlh
.
nlmsg_len
=
sizeof
(
req
);
req
.
nlh
.
nlmsg_type
=
RTM_GETADDR
;
req
.
nlh
.
nlmsg_flags
=
NLM_F_ROOT
|
NLM_F_MATCH
|
NLM_F_REQUEST
;
req
.
nlh
.
nlmsg_pid
=
0
;
req
.
nlh
.
nlmsg_seq
=
++
seq
;
req
.
g
.
rtgen_family
=
AF_INET
;
req
.
g
.
rtgen_family
=
family
;
/* Don't block in recvfrom if send fails */
while
((
len
=
sendto
(
daemon
->
netlinkfd
,
(
void
*
)
&
req
,
sizeof
(
req
),
0
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
)))
==
-
1
&&
retry_send
());
if
(
len
==
-
1
)
{
/* if RTnetlink not configured in the kernel, don't keep trying. */
if
(
errno
==
ECONNREFUSED
)
{
close
(
daemon
->
netlinkfd
);
daemon
->
netlinkfd
=
-
1
;
}
return
0
;
}
get_next:
while
(
1
)
{
if
((
len
=
netlink_recv
(
daemon
))
==
-
1
)
return
0
;
for
(
h
=
(
struct
nlmsghdr
*
)
iov
[
0
].
iov_base
;
NLMSG_OK
(
h
,
(
unsigned
int
)
len
);
h
=
NLMSG_NEXT
(
h
,
len
))
{
if
(
h
->
nlmsg_seq
!=
seq
)
goto
get_next
;
if
(
h
->
nlmsg_type
==
NLMSG_DONE
)
break
;
for
(
h
=
(
struct
nlmsghdr
*
)
iov
.
iov_base
;
NLMSG_OK
(
h
,
(
size_t
)
len
);
h
=
NLMSG_NEXT
(
h
,
len
))
if
(
h
->
nlmsg_type
==
NLMSG_ERROR
)
return
0
;
if
(
h
->
nlmsg_type
==
RTM_NEWADDR
)
nl_err
(
h
);
else
if
(
h
->
nlmsg_seq
!=
seq
)
nl_routechange
(
daemon
,
h
);
/* May be multicast arriving async */
else
if
(
h
->
nlmsg_type
==
NLMSG_DONE
)
{
struct
ifaddrmsg
*
ifa
=
NLMSG_DATA
(
h
);
if
(
ifa
->
ifa_index
==
index
&&
ifa
->
ifa_family
==
AF_INET
)
#ifdef HAVE_IPV6
if
(
family
==
AF_INET
&&
ipv6_callback
)
{
family
=
AF_INET6
;
goto
again
;
}
#endif
return
1
;
}
else
if
(
h
->
nlmsg_type
==
RTM_NEWADDR
)
{
struct
ifaddrmsg
*
ifa
=
NLMSG_DATA
(
h
);
struct
rtattr
*
rta
=
IFA_RTA
(
ifa
);
unsigned
int
len1
=
h
->
nlmsg_len
-
NLMSG_LENGTH
(
sizeof
(
*
ifa
));
if
(
ifa
->
ifa_family
==
AF_INET
)
{
struct
in_addr
netmask
,
addr
,
broadcast
;
netmask
.
s_addr
=
htonl
(
0xffffffff
<<
(
32
-
ifa
->
ifa_prefixlen
));
...
...
@@ -162,51 +161,108 @@ int netlink_process(struct daemon *daemon, int index, struct in_addr relay,
rta
=
RTA_NEXT
(
rta
,
len1
);
}
if
(
addr
.
s_addr
)
if
(
addr
.
s_addr
&&
ipv4_callback
)
if
(
!
((
*
ipv4_callback
)(
daemon
,
addr
,
ifa
->
ifa_index
,
netmask
,
broadcast
,
parm
)))
return
0
;
}
#ifdef HAVE_IPV6
else
if
(
ifa
->
ifa_family
==
AF_INET6
)
{
ret
=
complete_context
(
daemon
,
addr
,
ret
,
netmask
,
broadcast
,
relay
,
primary
);
if
(
addr
.
s_addr
==
primary
.
s_addr
)
found_primary
=
1
;
struct
in6_addr
*
addrp
=
NULL
;
while
(
RTA_OK
(
rta
,
len1
))
{
if
(
rta
->
rta_type
==
IFA_ADDRESS
)
addrp
=
((
struct
in6_addr
*
)(
rta
+
1
));
rta
=
RTA_NEXT
(
rta
,
len1
);
}
if
(
addrp
&&
ipv6_callback
)
if
(
!
((
*
ipv6_callback
)(
daemon
,
addrp
,
ifa
->
ifa_index
,
ifa
->
ifa_index
,
parm
)))
return
0
;
}
#endif
}
}
*
retp
=
ret
;
return
found_primary
;
}
/* We arrange to receive netlink multicast messages whenever the network config changes.
If this happens and we still have a DNS packet in the buffer, we re-send it.
This helps on DoD links, where frequently the packet which triggers dialling is
a DNS query, which then gets lost. By re-sending, we can avoid the lookup
failing. */
void
netlink_multicast
(
struct
daemon
*
daemon
)
{
ssize_t
len
;
struct
nlmsghdr
*
h
;
if
((
len
=
netlink_recv
(
daemon
))
==
-
1
)
return
;
if
(
!
daemon
->
srv_save
)
return
;
for
(
h
=
(
struct
nlmsghdr
*
)
iov
[
0
].
iov_base
;
NLMSG_OK
(
h
,
(
unsigned
int
)
len
);
h
=
NLMSG_NEXT
(
h
,
len
))
if
((
len
=
netlink_recv
(
daemon
))
!=
-
1
)
{
if
(
h
->
nlmsg_type
==
NLMSG_DONE
||
h
->
nlmsg_type
==
NLMSG_ERROR
)
break
;
for
(
h
=
(
struct
nlmsghdr
*
)
iov
.
iov_base
;
NLMSG_OK
(
h
,
(
size_t
)
len
);
h
=
NLMSG_NEXT
(
h
,
len
))
if
(
h
->
nlmsg_type
==
NLMSG_ERROR
)
nl_err
(
h
);
else
nl_routechange
(
daemon
,
h
);
}
}
static
void
nl_err
(
struct
nlmsghdr
*
h
)
{
struct
nlmsgerr
*
err
=
NLMSG_DATA
(
h
);
if
(
err
->
error
!=
0
)
syslog
(
LOG_ERR
,
_
(
"RTnetlink returns error: %s"
),
strerror
(
-
(
err
->
error
)));
}
if
(
h
->
nlmsg_type
==
RTM_NEWADDR
||
h
->
nlmsg_type
==
RTM_NEWROUTE
)
/* We arrange to receive netlink multicast messages whenever the network route is added.
If this happens and we still have a DNS packet in the buffer, we re-send it.
This helps on DoD links, where frequently the packet which triggers dialling is
a DNS query, which then gets lost. By re-sending, we can avoid the lookup
failing. */
static
void
nl_routechange
(
struct
daemon
*
daemon
,
struct
nlmsghdr
*
h
)
{
if
(
h
->
nlmsg_type
==
RTM_NEWROUTE
&&
daemon
->
srv_save
)
{
struct
rtmsg
*
rtm
=
NLMSG_DATA
(
h
);
if
(
rtm
->
rtm_type
==
RTN_UNICAST
&&
rtm
->
rtm_scope
==
RT_SCOPE_LINK
)
while
(
sendto
(
daemon
->
srv_save
->
sfd
->
fd
,
daemon
->
packet
,
daemon
->
packet_len
,
0
,
&
daemon
->
srv_save
->
addr
.
sa
,
sa_len
(
&
daemon
->
srv_save
->
addr
))
==
-
1
&&
retry_send
());
break
;
}
}
}
void
arp_inject
(
int
fd
,
struct
in_addr
ip_addr
,
int
iface
,
unsigned
char
*
mac
,
unsigned
int
mac_len
)
{
struct
sockaddr_nl
addr
;
struct
{
struct
nlmsghdr
nlh
;
struct
ndmsg
m
;
struct
rtattr
addr_attr
;
struct
in_addr
addr
;
struct
rtattr
ll_attr
;
char
mac
[
DHCP_CHADDR_MAX
];
}
req
;
memset
(
&
req
,
0
,
sizeof
(
req
));
memset
(
&
addr
,
0
,
sizeof
(
addr
));
addr
.
nl_family
=
AF_NETLINK
;
req
.
nlh
.
nlmsg_len
=
sizeof
(
req
);
req
.
nlh
.
nlmsg_type
=
RTM_NEWNEIGH
;
req
.
nlh
.
nlmsg_flags
=
NLM_F_REQUEST
|
NLM_F_REPLACE
|
NLM_F_CREATE
;
req
.
m
.
ndm_family
=
AF_INET
;
req
.
m
.
ndm_ifindex
=
iface
;
req
.
m
.
ndm_state
=
NUD_REACHABLE
;
req
.
addr_attr
.
rta_type
=
NDA_DST
;
req
.
addr_attr
.
rta_len
=
RTA_LENGTH
(
sizeof
(
struct
in_addr
));
req
.
addr
=
ip_addr
;
req
.
ll_attr
.
rta_type
=
NDA_LLADDR
;
req
.
ll_attr
.
rta_len
=
RTA_LENGTH
(
mac_len
);
memcpy
(
req
.
mac
,
mac
,
mac_len
);
while
(
sendto
(
fd
,
(
void
*
)
&
req
,
sizeof
(
req
),
0
,
(
struct
sockaddr
*
)
&
addr
,
sizeof
(
addr
))
==
-
1
&&
retry_send
());
}
#endif
src/network.c
View file @
5e9e0efb
/* dnsmasq is Copyright (c) 2000 - 200
5
Simon Kelley
/* dnsmasq is Copyright (c) 2000 - 200
6
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,262 +10,183 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#include "dnsmasq.h"
static
int
iface_allowed
(
struct
daemon
*
daemon
,
struct
irec
*
iface
,
char
*
name
,
int
is_loopback
,
union
mysockaddr
*
addr
)
int
iface_check
(
struct
daemon
*
daemon
,
int
family
,
struct
all_addr
*
addr
,
char
*
name
)
{
struct
iname
*
tmp
;
/* If we are restricting the set of interfaces to use, make
sure that loopback interfaces are in that set. */
if
(
daemon
->
if_names
&&
is_loopback
)
{
struct
iname
*
lo
;
for
(
lo
=
daemon
->
if_names
;
lo
;
lo
=
lo
->
next
)
if
(
lo
->
name
&&
strcmp
(
lo
->
name
,
name
)
==
0
)
{
lo
->
isloop
=
1
;
break
;
}
if
(
!
lo
)
{
lo
=
safe_malloc
(
sizeof
(
struct
iname
));
lo
->
name
=
safe_malloc
(
strlen
(
name
)
+
1
);
strcpy
(
lo
->
name
,
name
);
lo
->
isloop
=
lo
->
used
=
1
;
lo
->
next
=
daemon
->
if_names
;
daemon
->
if_names
=
lo
;
}
}
/* check blacklist */
if
(
daemon
->
if_except
)
for
(
tmp
=
daemon
->
if_except
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
name
&&
strcmp
(
tmp
->
name
,
name
)
==
0
)
if
(
tmp
->
name
&&
(
strcmp
(
tmp
->
name
,
name
)
==
0
)
)
return
0
;
/* we may need to check the whitelist */
if
(
daemon
->
if_names
||
daemon
->
if_addrs
)
{
int
found
=
0
;
for
(
tmp
=
daemon
->
if_names
;
tmp
;
tmp
=
tmp
->
next
)
if
(
tmp
->
name
&&
(
strcmp
(
tmp
->
name
,
name
)
==
0
))
found
=
tmp
->
used
=
1
;
{
tmp
->
used
=
1
;
return
1
;
}
for
(
tmp
=
daemon
->
if_addrs
;
tmp
;
tmp
=
tmp
->
next
)
if
(
sockaddr_isequal
(
&
tmp
->
addr
,
addr
))
found
=
tmp
->
used
=
1
;
if
(
!
found
)
return
0
;
if
(
tmp
->
addr
.
sa
.
sa_family
==
family
)
{
if
(
family
==
AF_INET
&&
tmp
->
addr
.
in
.
sin_addr
.
s_addr
==
addr
->
addr
.
addr4
.
s_addr
)
{
tmp
->
used
=
1
;
return
1
;
}
#ifdef HAVE_IPV6
else
if
(
family
==
AF_INET6
&&
IN6_ARE_ADDR_EQUAL
(
&
tmp
->
addr
.
in6
.
sin6_addr
,
&
addr
->
addr
.
addr6
))
{
tmp
->
used
=
1
;
return
1
;
}
#endif
}
/* check whether the interface IP has been added already
it is possible to have multiple interfaces with the same address */
for
(;
iface
;
iface
=
iface
->
next
)
if
(
sockaddr_isequal
(
&
iface
->
addr
,
addr
))
break
;
if
(
iface
)
return
0
;
}
return
1
;
}
/* This does two different jobs: if chainp is non-NULL, it puts
a list of all the interfaces allowed by config into *chainp.
If chainp is NULL, it returns 1 if addr is an address of an interface
allowed by config and if that address is IPv4, it fills in the
netmask of the interface.
static
int
iface_allowed
(
struct
daemon
*
daemon
,
struct
irec
**
irecp
,
int
if_index
,
union
mysockaddr
*
addr
,
struct
in_addr
netmask
)
{
struct
irec
*
iface
;
int
fd
;
struct
ifreq
ifr
;
If chainp is non-NULL, a zero return indicates a fatal error.
/* check whether the interface IP has been added already
we call this routine multiple times. */
for
(
iface
=
*
irecp
;
iface
;
iface
=
iface
->
next
)
if
(
sockaddr_isequal
(
&
iface
->
addr
,
addr
))
return
1
;
If chainp is NULL, errors result in a match failure and zero return.
*/
int
enumerate_interfaces
(
struct
daemon
*
daemon
,
struct
irec
**
chainp
,
union
mysockaddr
*
test_addrp
,
struct
in_addr
*
netmaskp
)
{
#if defined(HAVE_LINUX_IPV6_PROC) && defined(HAVE_IPV6)
FILE
*
f
;
#ifdef HAVE_LINUX_NETWORK
ifr
.
ifr_ifindex
=
if_index
;
#endif
union
mysockaddr
addr
;
struct
irec
*
iface
=
NULL
;
char
*
buf
,
*
ptr
;
struct
ifreq
*
ifr
=
NULL
;
struct
ifconf
ifc
;
int
lastlen
=
0
;
int
len
=
20
*
sizeof
(
struct
ifreq
);
int
fd
=
socket
(
PF_INET
,
SOCK_DGRAM
,
0
);
struct
in_addr
netmask
;
int
ret
=
0
;
netmask
.
s_addr
=
0
;
/* eliminate warning */
if
(
fd
==
-
1
)
return
0
;
#ifdef HAVE_IPV6
if
(
test_addrp
&&
test_addrp
->
sa
.
sa_family
==
AF_INET6
)
test_addrp
->
in6
.
sin6_flowinfo
=
htonl
(
0
);
if
((
fd
=
socket
(
PF_INET
,
SOCK_DGRAM
,
0
))
==
-
1
||
#ifdef HAVE_LINUX_NETWORK
ioctl
(
fd
,
SIOCGIFNAME
,
&
ifr
)
==
-
1
||
#else
!
if_indextoname
(
if_index
,
ifr
.
ifr_name
)
||
#endif
while
(
1
)
{
buf
=
safe_malloc
(
len
);
ifc
.
ifc_len
=
len
;
ifc
.
ifc_buf
=
buf
;
if
(
ioctl
(
fd
,
SIOCGIFCONF
,
&
ifc
)
<
0
)
ioctl
(
fd
,
SIOCGIFFLAGS
,
&
ifr
)
==
-
1
)
{
if
(
errno
!=
EINVAL
||
lastlen
!=
0
)
goto
exit
;
}
else
if
(
fd
!=
-
1
)
{
if
(
ifc
.
ifc_len
==
lastlen
)
break
;
/* got a big enough buffer now */
lastlen
=
ifc
.
ifc_len
;
int
errsave
=
errno
;
close
(
fd
);
errno
=
errsave
;
}
len
+=
10
*
sizeof
(
struct
ifreq
);
free
(
buf
);
return
0
;
}
for
(
ptr
=
buf
;
ptr
<
buf
+
ifc
.
ifc_len
;
)
{
#ifdef HAVE_SOCKADDR_SA_LEN
/* subsequent entries may not be aligned, so copy into
an aligned buffer to avoid nasty complaints about
unaligned accesses. */
int
ifr_len
=
((
struct
ifreq
*
)
ptr
)
->
ifr_addr
.
sa_len
+
IF_NAMESIZE
;
if
(
!
(
ifr
=
realloc
(
ifr
,
ifr_len
)))
goto
exit
;
memcpy
(
ifr
,
ptr
,
ifr_len
);
ptr
+=
ifr_len
;
#else
ifr
=
(
struct
ifreq
*
)
ptr
;
ptr
+=
sizeof
(
struct
ifreq
);
#endif
close
(
fd
);
/* copy address since getting flags overwrites */
if
(
ifr
->
ifr_addr
.
sa_family
==
AF_INET
)
/* If we are restricting the set of interfaces to use, make
sure that loopback interfaces are in that set. */
if
(
daemon
->
if_names
&&
(
ifr
.
ifr_flags
&
IFF_LOOPBACK
))
{
addr
.
in
=
*
((
struct
sockaddr_in
*
)
&
ifr
->
ifr_addr
);
addr
.
in
.
sin_port
=
htons
(
daemon
->
port
);
if
(
ioctl
(
fd
,
SIOCGIFNETMASK
,
ifr
)
==
-
1
)
goto
exit
;
netmask
=
((
struct
sockaddr_in
*
)
&
ifr
->
ifr_addr
)
->
sin_addr
;
}
#ifdef HAVE_IPV6
else
if
(
ifr
->
ifr_addr
.
sa_family
==
AF_INET6
)
struct
iname
*
lo
;
for
(
lo
=
daemon
->
if_names
;
lo
;
lo
=
lo
->
next
)
if
(
lo
->
name
&&
strcmp
(
lo
->
name
,
ifr
.
ifr_name
)
==
0
)
{
#ifdef HAVE_BROKEN_SOCKADDR_IN6
addr
.
in6
=
*
((
struct
my_sockaddr_in6
*
)
&
ifr
->
ifr_addr
);
#else
addr
.
in6
=
*
((
struct
sockaddr_in6
*
)
&
ifr
->
ifr_addr
);
#endif
addr
.
in6
.
sin6_port
=
htons
(
daemon
->
port
);
addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
lo
->
isloop
=
1
;
break
;
}
#endif
else
continue
;
/* unknown address family */
if
(
ioctl
(
fd
,
SIOCGIFFLAGS
,
ifr
)
<
0
)
goto
exit
;
if
(
iface_allowed
(
daemon
,
iface
,
ifr
->
ifr_name
,
ifr
->
ifr_flags
&
IFF_LOOPBACK
,
&
addr
))
{
if
(
chainp
)
if
(
!
lo
&&
(
lo
=
malloc
(
sizeof
(
struct
iname
))))
{
struct
irec
*
new
=
safe_malloc
(
sizeof
(
struct
irec
));
new
->
addr
=
addr
;
new
->
netmask
=
netmask
;
new
->
next
=
iface
;
iface
=
new
;
}
else
if
(
sockaddr_isequal
(
&
addr
,
test_addrp
))
{
*
netmaskp
=
netmask
;
ret
=
1
;
goto
exit
;
}
lo
->
name
=
safe_malloc
(
strlen
(
ifr
.
ifr_name
)
+
1
);
strcpy
(
lo
->
name
,
ifr
.
ifr_name
);
lo
->
isloop
=
lo
->
used
=
1
;
lo
->
next
=
daemon
->
if_names
;
daemon
->
if_names
=
lo
;
}
}
#if defined(HAVE_LINUX_IPV6_PROC) && defined(HAVE_IPV6)
/* IPv6 addresses don't seem to work with SIOCGIFCONF. Barf */
/* This code snarfed from net-tools 1.60 and certainly linux specific, though
it shouldn't break on other Unices, and their SIOGIFCONF might work. */
if
((
f
=
fopen
(
IP6INTERFACES
,
"r"
)))
{
unsigned
int
plen
,
scope
,
flags
,
if_idx
;
char
devname
[
21
],
addrstring
[
33
];
if
(
addr
->
sa
.
sa_family
==
AF_INET
&&
!
iface_check
(
daemon
,
AF_INET
,
(
struct
all_addr
*
)
&
addr
->
in
.
sin_addr
,
ifr
.
ifr_name
))
return
1
;
while
(
fscanf
(
f
,
"%32s %x %x %x %x %20s
\n
"
,
addrstring
,
&
if_idx
,
&
plen
,
&
scope
,
&
flags
,
devname
)
!=
EOF
)
{
int
i
;
struct
ifreq
sifr
;
unsigned
char
*
addr6p
=
(
unsigned
char
*
)
&
addr
.
in6
.
sin6_addr
;
memset
(
&
addr
,
0
,
sizeof
(
addr
));
addr
.
sa
.
sa_family
=
AF_INET6
;
for
(
i
=
0
;
i
<
16
;
i
++
)
#ifdef HAVE_IPV6
if
(
addr
->
sa
.
sa_family
==
AF_INET6
&&
!
iface_check
(
daemon
,
AF_INET6
,
(
struct
all_addr
*
)
&
addr
->
in6
.
sin6_addr
,
ifr
.
ifr_name
))
return
1
;
#endif
/* add to list */
if
((
iface
=
malloc
(
sizeof
(
struct
irec
))))
{
unsigned
int
byte
;
sscanf
(
addrstring
+
i
+
i
,
"%02x"
,
&
byte
);
addr6p
[
i
]
=
byte
;
iface
->
addr
=
*
addr
;
iface
->
netmask
=
netmask
;
iface
->
next
=
*
irecp
;
*
irecp
=
iface
;
return
1
;
}
addr
.
in6
.
sin6_port
=
htons
(
daemon
->
port
);
addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
addr
.
in6
.
sin6_scope_id
=
htonl
(
scope
);
strncpy
(
sifr
.
ifr_name
,
devname
,
IF_NAMESIZE
);
if
(
ioctl
(
fd
,
SIOCGIFFLAGS
,
&
sifr
)
<
0
)
goto
exit
;
errno
=
ENOMEM
;
return
0
;
}
if
(
iface_allowed
(
daemon
,
iface
,
sifr
.
ifr_name
,
sifr
.
ifr_flags
&
IFF_LOOPBACK
,
&
addr
))
{
if
(
chainp
)
{
struct
irec
*
new
=
safe_malloc
(
sizeof
(
struct
irec
));
new
->
addr
=
addr
;
new
->
next
=
iface
;
iface
=
new
;
}
else
if
(
sockaddr_isequal
(
&
addr
,
test_addrp
))
{
ret
=
1
;
goto
exit
;
}
}
}
fclose
(
f
);
}
#endif
/* LINUX */
#ifdef HAVE_IPV6
static
int
iface_allowed_v6
(
struct
daemon
*
daemon
,
struct
in6_addr
*
local
,
int
scope
,
int
if_index
,
void
*
vparam
)
{
union
mysockaddr
addr
;
struct
in_addr
netmask
;
/* dummy */
if
(
chainp
)
{
*
chainp
=
iface
;
ret
=
1
;
}
netmask
.
s_addr
=
0
;
exit:
if
(
buf
)
free
(
buf
);
#ifdef HAVE_SOCKADDR_SA_LEN
if
(
ifr
)
free
(
ifr
);
addr
.
in6
.
sin6_len
=
sizeof
(
addr
.
in6
);
#endif
close
(
fd
);
addr
.
in6
.
sin6_family
=
AF_INET6
;
addr
.
in6
.
sin6_addr
=
*
local
;
addr
.
in6
.
sin6_port
=
htons
(
daemon
->
port
);
addr
.
in6
.
sin6_scope_id
=
scope
;
addr
.
in6
.
sin6_flowinfo
=
0
;
return
ret
;
return
iface_allowed
(
daemon
,
(
struct
irec
**
)
vparam
,
if_index
,
&
addr
,
netmask
)
;
}
#endif
#if defined(HAVE_IPV6) && (defined(IP_PKTINFO) || (defined(IP_RECVDSTADDR) && defined(IP_RECVIF) && defined(IP_SENDSRCADDR)))
static
int
iface_allowed_v4
(
struct
daemon
*
daemon
,
struct
in_addr
local
,
int
if_index
,
struct
in_addr
netmask
,
struct
in_addr
broadcast
,
void
*
vparam
)
{
union
mysockaddr
addr
;
#ifdef HAVE_SOCKADDR_SA_LEN
addr
.
in
.
sin_len
=
sizeof
(
addr
.
in
);
#endif
addr
.
in
.
sin_family
=
AF_INET
;
addr
.
in
.
sin_addr
=
broadcast
;
/* warning */
addr
.
in
.
sin_addr
=
local
;
addr
.
in
.
sin_port
=
htons
(
daemon
->
port
);
return
iface_allowed
(
daemon
,
(
struct
irec
**
)
vparam
,
if_index
,
&
addr
,
netmask
);
}
int
enumerate_interfaces
(
struct
daemon
*
daemon
)
{
#ifdef HAVE_IPV6
return
iface_enumerate
(
daemon
,
&
daemon
->
interfaces
,
iface_allowed_v4
,
iface_allowed_v6
);
#else
return
iface_enumerate
(
daemon
,
&
daemon
->
interfaces
,
iface_allowed_v4
,
NULL
);
#endif
}
#if defined(HAVE_IPV6) && \
(defined(HAVE_LINUX_NETWORK) || \
(defined(IP_RECVDSTADDR) && defined(IP_RECVIF) && defined(IP_SENDSRCADDR)))
static
int
create_ipv6_listener
(
struct
listener
**
link
,
int
port
)
{
union
mysockaddr
addr
;
...
...
@@ -276,9 +197,10 @@ static int create_ipv6_listener(struct listener **link, int port)
addr
.
in6
.
sin6_family
=
AF_INET6
;
addr
.
in6
.
sin6_addr
=
in6addr_any
;
addr
.
in6
.
sin6_port
=
htons
(
port
);
addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
addr
.
in6
.
sin6_flowinfo
=
0
;
addr
.
in6
.
sin6_scope_id
=
0
;
#ifdef HAVE_SOCKADDR_SA_LEN
addr
.
in6
.
sin6_len
=
sizeof
(
struct
sockaddr_
in6
);
addr
.
in6
.
sin6_len
=
sizeof
(
addr
.
in6
);
#endif
/* No error of the kernel doesn't support IPv6 */
...
...
@@ -332,7 +254,7 @@ static int create_ipv6_listener(struct listener **link, int port)
struct
listener
*
create_wildcard_listeners
(
int
port
)
{
#if !(defined(
IP_PKTINFO
) || (defined(IP_RECVDSTADDR) && defined(IP_RECVIF) && defined(IP_SENDSRCADDR)))
#if !(defined(
HAVE_LINUX_NETWORK
) || (defined(IP_RECVDSTADDR) && defined(IP_RECVIF) && defined(IP_SENDSRCADDR)))
port
=
0
;
/* eliminate warning */
return
NULL
;
#else
...
...
@@ -369,7 +291,7 @@ struct listener *create_wildcard_listeners(int port)
setsockopt
(
fd
,
SOL_SOCKET
,
SO_REUSEADDR
,
&
opt
,
sizeof
(
opt
))
==
-
1
||
(
flags
=
fcntl
(
fd
,
F_GETFL
,
0
))
==
-
1
||
fcntl
(
fd
,
F_SETFL
,
flags
|
O_NONBLOCK
)
==
-
1
||
#if defined(
IP_PKTINFO
)
#if defined(
HAVE_LINUX_NETWORK
)
setsockopt
(
fd
,
SOL_IP
,
IP_PKTINFO
,
&
opt
,
sizeof
(
opt
))
==
-
1
||
#elif defined(IP_RECVDSTADDR) && defined(IP_RECVIF)
setsockopt
(
fd
,
IPPROTO_IP
,
IP_RECVDSTADDR
,
&
opt
,
sizeof
(
opt
))
==
-
1
||
...
...
@@ -393,14 +315,14 @@ struct listener *create_wildcard_listeners(int port)
#endif
}
struct
listener
*
create_bound_listeners
(
struct
irec
*
interfaces
,
int
port
)
struct
listener
*
create_bound_listeners
(
struct
daemon
*
daemon
)
{
struct
listener
*
listeners
=
NULL
;
struct
irec
*
iface
;
int
flags
=
port
,
opt
=
1
;
int
flags
,
opt
=
1
;
for
(
iface
=
interfaces
;
iface
;
iface
=
iface
->
next
)
for
(
iface
=
daemon
->
interfaces
;
iface
;
iface
=
iface
->
next
)
{
struct
listener
*
new
=
safe_malloc
(
sizeof
(
struct
listener
));
new
->
family
=
iface
->
addr
.
sa
.
sa_family
;
...
...
@@ -439,9 +361,9 @@ struct listener *create_bound_listeners(struct irec *interfaces, int port)
else
#endif
{
char
addrbuff
[
ADDRSTRLEN
]
;
prettyprint_addr
(
&
iface
->
addr
,
addrbuff
);
die
(
_
(
"failed to bind listening socket for %s: %s"
),
addr
buff
);
prettyprint_addr
(
&
iface
->
addr
,
daemon
->
namebuff
)
;
die
(
_
(
"failed to bind listening socket for %s: %s"
),
daemon
->
name
buff
);
}
}
else
...
...
@@ -611,7 +533,7 @@ void reload_servers(char *fname, struct daemon *daemon)
#endif
{
#ifdef HAVE_SOCKADDR_SA_LEN
source_addr
.
in
.
sin_len
=
addr
.
in
.
sin_len
=
sizeof
(
s
truct
sockaddr_
in
);
source_addr
.
in
.
sin_len
=
addr
.
in
.
sin_len
=
sizeof
(
s
ource_addr
.
in
);
#endif
source_addr
.
in
.
sin_family
=
addr
.
in
.
sin_family
=
AF_INET
;
addr
.
in
.
sin_port
=
htons
(
NAMESERVER_PORT
);
...
...
@@ -622,11 +544,12 @@ void reload_servers(char *fname, struct daemon *daemon)
else
if
(
inet_pton
(
AF_INET6
,
token
,
&
addr
.
in6
.
sin6_addr
)
>
0
)
{
#ifdef HAVE_SOCKADDR_SA_LEN
source_addr
.
in6
.
sin6_len
=
addr
.
in6
.
sin6_len
=
sizeof
(
s
truct
sockaddr_
in6
);
source_addr
.
in6
.
sin6_len
=
addr
.
in6
.
sin6_len
=
sizeof
(
s
ource_addr
.
in6
);
#endif
source_addr
.
in6
.
sin6_family
=
addr
.
in6
.
sin6_family
=
AF_INET6
;
addr
.
in6
.
sin6_port
=
htons
(
NAMESERVER_PORT
);
source_addr
.
in6
.
sin6_flowinfo
=
addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
source_addr
.
in6
.
sin6_flowinfo
=
addr
.
in6
.
sin6_flowinfo
=
0
;
source_addr
.
in6
.
sin6_scope_id
=
addr
.
in6
.
sin6_scope_id
=
0
;
source_addr
.
in6
.
sin6_addr
=
in6addr_any
;
source_addr
.
in6
.
sin6_port
=
htons
(
daemon
->
query_port
);
}
...
...
src/option.c
View file @
5e9e0efb
...
...
@@ -10,8 +10,6 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#include "dnsmasq.h"
struct
myoption
{
...
...
@@ -21,7 +19,7 @@ struct myoption {
int
val
;
};
#define OPTSTRING "31yZDNLERKzowefnbvhdkqr:m:p:c:l:s:i:t:u:g:a:x:S:C:A:T:H:Q:I:B:F:G:O:M:X:V:U:j:P:J:W:Y:2:4:"
#define OPTSTRING "
5
31yZDNLERKzowefnbvhdkqr:m:p:c:l:s:i:t:u:g:a:x:S:C:A:T:H:Q:I:B:F:G:O:M:X:V:U:j:P:J:W:Y:2:4:"
static
const
struct
myoption
opts
[]
=
{
{
"version"
,
0
,
0
,
'v'
},
...
...
@@ -83,6 +81,7 @@ static const struct myoption opts[] = {
{
"enable-dbus"
,
0
,
0
,
'1'
},
{
"bootp-dynamic"
,
0
,
0
,
'3'
},
{
"dhcp-mac"
,
1
,
0
,
'4'
},
{
"no-ping"
,
0
,
0
,
'5'
},
{
0
,
0
,
0
,
0
}
};
...
...
@@ -112,6 +111,7 @@ static const struct optflags optmap[] = {
{
'y'
,
OPT_LOCALISE
},
{
'1'
,
OPT_DBUS
},
{
'3'
,
OPT_BOOTP_DYNAMIC
},
{
'5'
,
OPT_NO_PING
},
{
'v'
,
0
},
{
'w'
,
0
},
{
0
,
0
}
...
...
@@ -179,6 +179,7 @@ static const struct {
{
"-2, --no-dhcp-interface=interface"
,
gettext_noop
(
"Do not provide DHCP on this interface, only provide DNS."
),
NULL
},
{
"-3, --bootp-dynamic"
,
gettext_noop
(
"Enable dynamic address allocation for bootp."
),
NULL
},
{
"-4, --dhcp-mac=<id>,<mac address>"
,
gettext_noop
(
"Map MAC address (with wildcards) to option set."
),
NULL
},
{
"-5, --no-ping"
,
gettext_noop
(
"Disable ICMP echo address checking in the DHCP server."
),
NULL
},
{
NULL
,
NULL
,
NULL
}
};
...
...
@@ -300,7 +301,6 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
daemon
->
namebuff
=
buff
;
/* Set defaults - everything else is zero or NULL */
daemon
->
min_leasetime
=
UINT_MAX
;
daemon
->
cachesize
=
CACHESIZ
;
daemon
->
port
=
NAMESERVER_PORT
;
daemon
->
default_resolv
.
is_default
=
1
;
...
...
@@ -704,16 +704,17 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
{
new
->
addr
.
sa
.
sa_family
=
AF_INET
;
#ifdef HAVE_SOCKADDR_SA_LEN
new
->
addr
.
in
.
sin_len
=
sizeof
(
struct
sockaddr_
in
);
new
->
addr
.
in
.
sin_len
=
sizeof
(
new
->
addr
.
in
);
#endif
}
#ifdef HAVE_IPV6
else
if
(
arg
&&
inet_pton
(
AF_INET6
,
arg
,
&
new
->
addr
.
in6
.
sin6_addr
)
>
0
)
{
new
->
addr
.
sa
.
sa_family
=
AF_INET6
;
new
->
addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
new
->
addr
.
in6
.
sin6_flowinfo
=
0
;
new
->
addr
.
in6
.
sin6_scope_id
=
0
;
#ifdef HAVE_SOCKADDR_SA_LEN
new
->
addr
.
in6
.
sin6_len
=
sizeof
(
struct
sockaddr_
in6
);
new
->
addr
.
in6
.
sin6_len
=
sizeof
(
new
->
addr
.
in6
);
#endif
}
#endif
...
...
@@ -841,9 +842,10 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
newlist
->
addr
.
in6
.
sin6_port
=
htons
(
serv_port
);
newlist
->
source_addr
.
in6
.
sin6_port
=
htons
(
source_port
);
newlist
->
addr
.
sa
.
sa_family
=
newlist
->
source_addr
.
sa
.
sa_family
=
AF_INET6
;
newlist
->
addr
.
in6
.
sin6_flowinfo
=
newlist
->
source_addr
.
in6
.
sin6_flowinfo
=
htonl
(
0
);
newlist
->
addr
.
in6
.
sin6_flowinfo
=
newlist
->
source_addr
.
in6
.
sin6_flowinfo
=
0
;
newlist
->
addr
.
in6
.
sin6_scope_id
=
newlist
->
source_addr
.
in6
.
sin6_scope_id
=
0
;
#ifdef HAVE_SOCKADDR_SA_LEN
newlist
->
addr
.
in6
.
sin6_len
=
newlist
->
source_addr
.
in6
.
sin6_len
=
sizeof
(
struct
sockaddr_
in6
);
newlist
->
addr
.
in6
.
sin6_len
=
newlist
->
source_addr
.
in6
.
sin6_len
=
sizeof
(
newlist
->
addr
.
in6
);
#endif
if
(
source
)
{
...
...
@@ -1084,9 +1086,6 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
}
}
}
if
(
new
->
lease_time
<
daemon
->
min_leasetime
)
daemon
->
min_leasetime
=
new
->
lease_time
;
break
;
}
...
...
@@ -1226,11 +1225,8 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
free
(
new
);
}
else
{
if
((
new
->
flags
&
CONFIG_TIME
)
&&
new
->
lease_time
<
daemon
->
min_leasetime
)
daemon
->
min_leasetime
=
new
->
lease_time
;
daemon
->
dhcp_conf
=
new
;
}
break
;
}
...
...
@@ -1808,9 +1804,9 @@ struct daemon *read_opts (int argc, char **argv, char *compile_opts)
else
die
(
_
(
"bad command line options: %s."
),
#ifdef HAVE_GETOPT_LONG
problem
?
problem
:
"try --help"
problem
?
problem
:
_
(
"try --help"
)
#else
problem
?
problem
:
"try -w"
problem
?
problem
:
_
(
"try -w"
)
#endif
);
}
...
...
src/rfc2131.c
View file @
5e9e0efb
...
...
@@ -10,8 +10,6 @@
GNU General Public License for more details.
*/
/* Author's email: simon@thekelleys.org.uk */
#include "dnsmasq.h"
#define BOOTREQUEST 1
...
...
@@ -44,9 +42,12 @@
#define OPTION_CLIENT_ID 61
#define OPTION_USER_CLASS 77
#define OPTION_CLIENT_FQDN 81
#define OPTION_AGENT_ID 82
#define OPTION_SUBNET_SELECT 118
#define OPTION_END 255
#define SUBOPT_SUBNET_SELECT 5
/* RFC 3527 */
#define DHCPDISCOVER 1
#define DHCPOFFER 2
#define DHCPREQUEST 3
...
...
@@ -57,19 +58,25 @@
#define DHCPINFORM 8
#define have_config(config, mask) ((config) && ((config)->flags & (mask)))
#define option_len(opt) ((int)(((unsigned char *)(opt))[1]))
#define option_ptr(opt) ((void *)&(((unsigned char *)(opt))[2]))
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
,
struct
dhcp_packet
*
start
);
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
int
option_len
(
unsigned
char
*
opt
);
static
void
*
option_ptr
(
unsigned
char
*
opt
);
static
struct
in_addr
option_addr
(
unsigned
char
*
opt
);
static
unsigned
int
option_uint
(
unsigned
char
*
opt
,
int
size
);
static
void
log_packet
(
char
*
type
,
struct
in_addr
*
addr
,
unsigned
char
*
hwaddr
,
int
hw_len
,
char
*
interface
,
char
*
string
);
static
char
*
print_mac
(
struct
daemon
*
daemon
,
unsigned
char
*
mac
,
int
len
);
static
void
log_packet
(
struct
daemon
*
daemon
,
char
*
type
,
struct
in_addr
*
addr
,
struct
dhcp_packet
*
mess
,
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
,
...
...
@@ -80,6 +87,7 @@ static unsigned char *do_req_options(struct dhcp_context *context,
unsigned
char
fqdn_flags
,
int
null_term
);
size_t
dhcp_reply
(
struct
daemon
*
daemon
,
struct
dhcp_context
*
context
,
char
*
iface_name
,
size_t
sz
,
time_t
now
,
int
unicast_dest
)
{
...
...
@@ -89,9 +97,8 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
struct
dhcp_mac
*
mac
;
struct
dhcp_netid_list
*
id_list
;
int
clid_len
=
0
,
ignore
=
0
;
struct
dhcp_packet
*
mess
=
&
daemon
->
dhcp_packet
->
data
;
unsigned
char
*
p
=
mess
->
options
+
sizeof
(
u32
);
/* skip cookie */
unsigned
char
*
end
=
(
unsigned
char
*
)(
daemon
->
dhcp_packet
+
1
);
struct
dhcp_packet
*
mess
=
daemon
->
dhcp_packet
.
iov_base
;
unsigned
char
*
p
,
*
end
=
(
unsigned
char
*
)(
mess
+
1
);
char
*
hostname
=
NULL
,
*
offer_hostname
=
NULL
,
*
client_hostname
=
NULL
;
int
hostname_auth
=
0
,
borken_opt
=
0
;
unsigned
char
*
req_options
=
NULL
;
...
...
@@ -104,11 +111,12 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
unsigned
int
mess_type
=
0
;
unsigned
char
fqdn_flags
=
0
;
subnet_addr
.
s_addr
=
0
;
unsigned
char
*
agent_id
=
NULL
;
if
(
mess
->
op
!=
BOOTREQUEST
)
if
(
mess
->
op
!=
BOOTREQUEST
||
mess
->
hlen
>
DHCP_CHADDR_MAX
)
return
0
;
if
(
mess
->
h
len
>
DHCP_CHADDR_MAX
)
if
(
mess
->
h
type
==
0
&&
mess
->
hlen
!=
0
)
return
0
;
/* check for DHCP rather than BOOTP */
...
...
@@ -120,13 +128,52 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
if
(
*
((
u32
*
)
&
mess
->
options
)
!=
htonl
(
DHCP_COOKIE
))
return
0
;
/* two things to note here: expand_buf may move the packet,
so reassign mess from daemon->packet. Also, the size
sent includes the IP and UDP headers, hence the magic "-28" */
if
((
opt
=
option_find
(
mess
,
sz
,
OPTION_MAXMESSAGE
,
2
)))
{
size_t
size
=
(
size_t
)
option_uint
(
opt
,
2
)
-
28
;
if
(
size
>
DHCP_PACKET_MAX
)
size
=
DHCP_PACKET_MAX
;
else
if
(
size
<
sizeof
(
struct
dhcp_packet
))
size
=
sizeof
(
struct
dhcp_packet
);
if
(
expand_buf
(
&
daemon
->
dhcp_packet
,
size
))
{
mess
=
daemon
->
dhcp_packet
.
iov_base
;
end
=
((
unsigned
char
*
)
mess
)
+
size
;
}
}
/* Some buggy clients set ciaddr when they shouldn't, so clear that here since
it can affect the context-determination code. */
if
((
option_find
(
mess
,
sz
,
OPTION_REQUESTED_IP
,
INADDRSZ
)
||
mess_type
==
DHCPDISCOVER
))
mess
->
ciaddr
.
s_addr
=
0
;
/* Check for RFC3011 subnet selector */
if
((
opt
=
option_find
(
mess
,
sz
,
OPTION_SUBNET_SELECT
,
INADDRSZ
)))
if
((
opt
=
option_find
(
mess
,
sz
,
OPTION_AGENT_ID
,
1
)))
{
/* Any agent-id needs to be copied back out, verbatim, as the last option
in the packet. Here, we shift it to the very end of the buffer, if it doesn't
get overwritten, then it will be shuffled back at the end of processing.
Note that the incoming options must not be overwritten here, so there has to
be enough free space at the end of the packet to copy the option. */
unsigned
int
total
=
option_len
(
opt
)
+
2
;
unsigned
char
*
last_opt
=
option_find
(
mess
,
sz
,
OPTION_END
,
0
);
if
(
last_opt
&&
last_opt
<
end
-
total
)
{
agent_id
=
end
-
total
;
memcpy
(
agent_id
,
opt
,
total
);
}
/* look for RFC3527 Link selection sub-option */
if
((
opt
=
option_find1
(
option_ptr
(
opt
),
option_ptr
(
opt
)
+
option_len
(
opt
),
SUBOPT_SUBNET_SELECT
,
INADDRSZ
)))
subnet_addr
=
option_addr
(
opt
);
}
/* Check for RFC3011 subnet selector - only if RFC3527 one not present */
if
(
subnet_addr
.
s_addr
==
0
&&
(
opt
=
option_find
(
mess
,
sz
,
OPTION_SUBNET_SELECT
,
INADDRSZ
)))
subnet_addr
=
option_addr
(
opt
);
/* If there is no client identifier option, use the hardware address */
...
...
@@ -137,7 +184,6 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
}
/* do we have a lease in store? */
if
(
mess
->
htype
!=
0
&&
mess
->
hlen
!=
0
)
lease
=
lease_find_by_client
(
mess
->
chaddr
,
mess
->
hlen
,
mess
->
htype
,
clid
,
clid_len
);
/* If this request is missing a clid, but we've seen one before,
...
...
@@ -149,31 +195,14 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
}
}
/* htype == 0 is only allowed in DHCPINFORM,
this seems to be a microsoftism. */
if
(
mess
->
htype
==
0
)
{
if
(
mess_type
!=
DHCPINFORM
||
mess
->
hlen
!=
0
)
return
0
;
}
else
if
(
mess
->
hlen
==
0
)
return
0
;
for
(
mac
=
daemon
->
dhcp_macs
;
mac
;
mac
=
mac
->
next
)
if
(
mac
->
hwaddr_len
==
mess
->
hlen
&&
(
mac
->
hwaddr_type
==
mess
->
htype
||
mac
->
hwaddr_type
==
0
))
{
int
i
;
unsigned
int
mask
=
mac
->
mask
;
for
(
i
=
mac
->
hwaddr_len
-
1
;
i
>=
0
;
i
--
,
mask
=
mask
>>
1
)
if
(
mask
&
1
)
mac
->
hwaddr
[
i
]
=
mess
->
chaddr
[
i
];
if
(
memcmp
(
mac
->
hwaddr
,
mess
->
chaddr
,
mac
->
hwaddr_len
)
==
0
)
(
mac
->
hwaddr_type
==
mess
->
htype
||
mac
->
hwaddr_type
==
0
)
&&
memcmp_masked
(
mac
->
hwaddr
,
mess
->
chaddr
,
mess
->
hlen
,
mac
->
mask
))
{
mac
->
netid
.
next
=
netid
;
netid
=
&
mac
->
netid
;
}
}
/* Determine network for this packet. Our caller will have already linked all the
contexts which match the addresses of the receiving interface but if the
...
...
@@ -225,6 +254,7 @@ 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
);
...
...
@@ -236,6 +266,10 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
char
save
=
mess
->
file
[
128
];
struct
in_addr
*
logaddr
=
NULL
;
/* must have a MAC addr for bootp */
if
(
mess
->
htype
==
0
||
mess
->
hlen
==
0
)
return
0
;
if
(
have_config
(
config
,
CONFIG_DISABLE
))
message
=
_
(
"disabled"
);
...
...
@@ -271,6 +305,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
mess
->
yiaddr
=
config
->
addr
;
if
((
lease
=
lease_find_by_addr
(
config
->
addr
))
&&
(
lease
->
hwaddr_len
!=
mess
->
hlen
||
lease
->
hwaddr_type
!=
mess
->
htype
||
memcmp
(
lease
->
hwaddr
,
mess
->
chaddr
,
lease
->
hwaddr_len
)
!=
0
))
message
=
_
(
"address in use"
);
}
...
...
@@ -313,18 +348,18 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
lease_set_hwaddr
(
lease
,
mess
->
chaddr
,
NULL
,
mess
->
hlen
,
mess
->
htype
,
0
);
if
(
hostname
)
lease_set_hostname
(
lease
,
hostname
,
daemon
->
domain_suffix
,
1
);
lease_set_expires
(
lease
,
0
);
/* infinite lease */
lease_set_expires
(
lease
,
0
xffffffff
,
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
,
mess
);
p
=
option_end
(
p
,
end
,
NULL
,
mess
);
}
}
log_packet
(
NULL
,
logaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
message
);
log_packet
(
daemon
,
NULL
,
logaddr
,
mess
,
iface_name
,
message
);
mess
->
file
[
128
]
=
save
;
if
(
message
)
...
...
@@ -494,7 +529,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
(
"DECLINE"
,
option_ptr
(
opt
),
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
message
);
log_packet
(
daemon
,
"DECLINE"
,
option_ptr
(
opt
),
mess
,
iface_name
,
message
);
if
(
lease
&&
lease
->
addr
.
s_addr
==
option_addr
(
opt
).
s_addr
)
lease_prune
(
lease
,
now
);
...
...
@@ -522,21 +557,45 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
else
message
=
_
(
"unknown lease"
);
log_packet
(
"RELEASE"
,
&
mess
->
ciaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
message
);
log_packet
(
daemon
,
"RELEASE"
,
&
mess
->
ciaddr
,
mess
,
iface_name
,
message
);
return
0
;
case
DHCPDISCOVER
:
if
(
ignore
||
have_config
(
config
,
CONFIG_DISABLE
))
{
struct
in_addr
addr
;
message
=
_
(
"ignored"
);
opt
=
NULL
;
}
else
{
struct
in_addr
addr
,
conf
;
if
((
opt
=
option_find
(
mess
,
sz
,
OPTION_REQUESTED_IP
,
INADDRSZ
)))
addr
=
option_addr
(
opt
);
if
(
ignore
||
have_config
(
config
,
CONFIG_DISABLE
))
message
=
_
(
"ignored"
);
else
if
(
have_config
(
config
,
CONFIG_ADDR
)
&&
(
!
(
ltmp
=
lease_find_by_addr
(
config
->
addr
))
||
ltmp
==
lease
))
mess
->
yiaddr
=
config
->
addr
;
conf
.
s_addr
=
0
;
if
(
have_config
(
config
,
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"
),
inet_ntoa
(
config
->
addr
),
print_mac
(
daemon
,
ltmp
->
hwaddr
,
ltmp
->
hwaddr_len
));
else
{
struct
dhcp_context
*
tmp
;
for
(
tmp
=
context
;
tmp
;
tmp
=
tmp
->
current
)
if
(
context
->
local
.
s_addr
==
config
->
addr
.
s_addr
)
break
;
if
(
tmp
)
syslog
(
LOG_WARNING
,
_
(
"not using configured address %s because it is in use by the server"
),
inet_ntoa
(
config
->
addr
));
else
conf
=
config
->
addr
;
}
}
if
(
conf
.
s_addr
)
mess
->
yiaddr
=
conf
;
else
if
(
lease
&&
address_available
(
context
,
lease
->
addr
))
mess
->
yiaddr
=
lease
->
addr
;
else
if
(
opt
&&
address_available
(
context
,
addr
)
&&
!
lease_find_by_addr
(
addr
)
&&
...
...
@@ -544,9 +603,10 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
mess
->
yiaddr
=
addr
;
else
if
(
!
address_allocate
(
context
,
daemon
,
&
mess
->
yiaddr
,
mess
->
chaddr
,
mess
->
hlen
,
netid
,
now
))
message
=
_
(
"no address available"
);
log_packet
(
"DISCOVER"
,
opt
?
&
addr
:
NULL
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
message
);
}
log_packet
(
daemon
,
"DISCOVER"
,
opt
?
(
struct
in_addr
*
)
option_ptr
(
opt
)
:
NULL
,
mess
,
iface_name
,
message
);
if
(
message
||
!
(
context
=
narrow_context
(
context
,
mess
->
yiaddr
)))
return
0
;
...
...
@@ -556,16 +616,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
netid
=
&
context
->
netid
;
}
time
=
have_config
(
config
,
CONFIG_TIME
)
?
config
->
lease_time
:
context
->
lease_time
;
if
((
opt
=
option_find
(
mess
,
sz
,
OPTION_LEASE_TIME
,
4
)))
{
unsigned
int
req_time
=
option_uint
(
opt
,
4
);
if
(
time
==
0xffffffff
||
(
req_time
!=
0xffffffff
&&
req_time
<
time
))
time
=
req_time
;
}
else
if
(
lease
&&
lease
->
expires
!=
0
)
time
=
(
unsigned
int
)
difftime
(
lease
->
expires
,
now
);
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
);
...
...
@@ -579,9 +630,9 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
}
p
=
do_req_options
(
context
,
p
,
end
,
req_options
,
daemon
,
offer_hostname
,
netid
,
subnet_addr
,
fqdn_flags
,
borken_opt
);
p
=
option_end
(
p
,
end
,
mess
);
p
=
option_end
(
p
,
end
,
agent_id
,
mess
);
log_packet
(
"OFFER"
,
&
mess
->
yiaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
NULL
);
log_packet
(
daemon
,
"OFFER"
,
&
mess
->
yiaddr
,
mess
,
iface_name
,
NULL
);
return
p
-
(
unsigned
char
*
)
mess
;
case
DHCPREQUEST
:
...
...
@@ -638,11 +689,17 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
mess
->
yiaddr
=
mess
->
ciaddr
;
}
log_packet
(
"REQUEST"
,
&
mess
->
yiaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
NULL
);
log_packet
(
daemon
,
"REQUEST"
,
&
mess
->
yiaddr
,
mess
,
iface_name
,
NULL
);
if
(
!
message
)
{
struct
dhcp_config
*
addr_config
;
struct
dhcp_context
*
tmp
=
NULL
;
if
(
have_config
(
config
,
CONFIG_ADDR
))
for
(
tmp
=
context
;
tmp
;
tmp
=
tmp
->
current
)
if
(
context
->
local
.
s_addr
==
config
->
addr
.
s_addr
)
break
;
if
(
!
(
context
=
narrow_context
(
context
,
mess
->
yiaddr
)))
{
...
...
@@ -660,8 +717,8 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
/* Check if a new static address has been configured. Be very sure that
when the client does DISCOVER, it will get the static address, otherwise
an endless protocol loop will ensue. */
else
if
(
have_config
(
config
,
CONFIG_ADDR
)
&&
else
if
(
!
tmp
&&
have_config
(
config
,
CONFIG_ADDR
)
&&
config
->
addr
.
s_addr
!=
mess
->
yiaddr
.
s_addr
&&
(
!
(
ltmp
=
lease_find_by_addr
(
config
->
addr
))
||
ltmp
==
lease
))
message
=
_
(
"static lease available"
);
...
...
@@ -679,7 +736,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
if
(
message
)
{
log_packet
(
"NAK"
,
&
mess
->
yiaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
message
);
log_packet
(
daemon
,
"NAK"
,
&
mess
->
yiaddr
,
mess
,
iface_name
,
message
);
mess
->
siaddr
.
s_addr
=
mess
->
yiaddr
.
s_addr
=
0
;
bootp_option_put
(
mess
,
NULL
,
NULL
);
...
...
@@ -704,7 +761,7 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
hostname_auth
=
1
;
}
log_packet
(
"ACK"
,
&
mess
->
yiaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
hostname
);
log_packet
(
daemon
,
"ACK"
,
&
mess
->
yiaddr
,
mess
,
iface_name
,
hostname
);
if
(
context
->
netid
.
net
)
{
...
...
@@ -712,18 +769,11 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
netid
=
&
context
->
netid
;
}
time
=
have_config
(
config
,
CONFIG_TIME
)
?
config
->
lease_time
:
context
->
lease_time
;
if
((
opt
=
option_find
(
mess
,
sz
,
OPTION_LEASE_TIME
,
4
)))
{
unsigned
int
req_time
=
option_uint
(
opt
,
4
);
if
(
time
==
0xffffffff
||
(
req_time
!=
0xffffffff
&&
req_time
<
time
))
time
=
req_time
;
}
time
=
calc_time
(
context
,
config
,
NULL
,
option_find
(
mess
,
sz
,
OPTION_LEASE_TIME
,
4
),
now
);
lease_set_hwaddr
(
lease
,
mess
->
chaddr
,
clid
,
mess
->
hlen
,
mess
->
htype
,
clid_len
);
if
(
hostname
)
lease_set_hostname
(
lease
,
hostname
,
daemon
->
domain_suffix
,
hostname_auth
);
lease_set_expires
(
lease
,
time
==
0xffffffff
?
0
:
now
+
(
time_t
)
time
);
lease_set_expires
(
lease
,
time
,
now
);
mess
->
siaddr
=
context
->
local
;
bootp_option_put
(
mess
,
daemon
->
boot_config
,
netid
);
...
...
@@ -735,20 +785,20 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
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
*
7
)
/
8
)
-
fuzz
);
p
=
option_put
(
p
,
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
);
}
p
=
option_end
(
p
,
end
,
mess
);
p
=
option_end
(
p
,
end
,
agent_id
,
mess
);
return
p
-
(
unsigned
char
*
)
mess
;
case
DHCPINFORM
:
if
(
ignore
||
have_config
(
config
,
CONFIG_DISABLE
))
message
=
_
(
"ignored"
);
log_packet
(
"INFORM"
,
&
mess
->
ciaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
message
);
log_packet
(
daemon
,
"INFORM"
,
&
mess
->
ciaddr
,
mess
,
iface_name
,
message
);
if
(
message
||
mess
->
ciaddr
.
s_addr
==
0
||
!
(
context
=
narrow_context
(
context
,
mess
->
ciaddr
)))
...
...
@@ -768,46 +818,71 @@ size_t dhcp_reply(struct daemon *daemon, struct dhcp_context *context, char *ifa
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
,
mess
);
p
=
option_end
(
p
,
end
,
agent_id
,
mess
);
log_packet
(
"ACK"
,
&
mess
->
ciaddr
,
mess
->
chaddr
,
mess
->
hlen
,
iface_name
,
hostname
);
log_packet
(
daemon
,
"ACK"
,
&
mess
->
ciaddr
,
mess
,
iface_name
,
hostname
);
return
p
-
(
unsigned
char
*
)
mess
;
}
return
0
;
}
static
void
log_packet
(
char
*
type
,
struct
in_addr
*
addr
,
unsigned
char
*
hwaddr
,
int
hw_len
,
char
*
interface
,
char
*
string
)
static
unsigned
int
calc_time
(
struct
dhcp_context
*
context
,
struct
dhcp_config
*
config
,
struct
dhcp_lease
*
lease
,
unsigned
char
*
opt
,
time_t
now
)
{
char
buff
[(
DHCP_CHADDR_MAX
*
3
)
+
1
];
char
*
p
=
buff
;
unsigned
int
time
=
have_config
(
config
,
CONFIG_TIME
)
?
config
->
lease_time
:
context
->
lease_time
;
if
(
opt
)
{
unsigned
int
req_time
=
option_uint
(
opt
,
4
);
if
(
req_time
<
120
)
req_time
=
120
;
/* sanity */
if
(
time
==
0xffffffff
||
(
req_time
!=
0xffffffff
&&
req_time
<
time
))
time
=
req_time
;
}
else
if
(
lease
&&
lease
->
expires
!=
0
&&
difftime
(
lease
->
expires
,
now
)
>
0
.
0
)
{
unsigned
int
lease_time
=
(
unsigned
int
)
difftime
(
lease
->
expires
,
now
);
/* put a floor on lease-remaining time. */
if
(
lease_time
<
360
)
lease_time
=
360
;
if
(
time
>
lease_time
)
time
=
lease_time
;
}
return
time
;
}
static
char
*
print_mac
(
struct
daemon
*
daemon
,
unsigned
char
*
mac
,
int
len
)
{
char
*
p
=
daemon
->
namebuff
;
int
i
;
*
buff
=
0
;
for
(
i
=
0
;
i
<
hw_len
-
1
;
i
++
)
p
+=
sprintf
(
p
,
"%.2x:"
,
hwaddr
[
i
]);
p
+=
sprintf
(
p
,
"%.2x "
,
hwaddr
[
i
]);
if
(
len
==
0
)
sprintf
(
p
,
"<null> "
);
else
for
(
i
=
0
;
i
<
len
;
i
++
)
p
+=
sprintf
(
p
,
"%.2x%s"
,
mac
[
i
],
(
i
==
len
-
1
)
?
" "
:
":"
);
return
daemon
->
namebuff
;
}
static
void
log_packet
(
struct
daemon
*
daemon
,
char
*
type
,
struct
in_addr
*
addr
,
struct
dhcp_packet
*
mess
,
char
*
interface
,
char
*
string
)
{
syslog
(
LOG_INFO
,
"%s%s(%s) %s%s%s%s"
,
type
?
"DHCP"
:
"BOOTP"
,
type
?
type
:
""
,
interface
,
addr
?
inet_ntoa
(
*
addr
)
:
""
,
addr
?
" "
:
""
,
buff
,
print_mac
(
daemon
,
mess
->
chaddr
,
mess
->
hlen
)
,
string
?
string
:
""
);
}
static
int
option_len
(
unsigned
char
*
opt
)
{
return
opt
[
1
];
}
static
void
*
option_ptr
(
unsigned
char
*
opt
)
{
return
&
opt
[
2
];
}
static
struct
in_addr
option_addr
(
unsigned
char
*
opt
)
{
/* this worries about unaligned data in the option. */
...
...
@@ -891,8 +966,16 @@ static unsigned char *option_put(unsigned char *p, unsigned char *end, int opt,
return
p
;
}
static
unsigned
char
*
option_end
(
unsigned
char
*
p
,
unsigned
char
*
end
,
struct
dhcp_packet
*
start
)
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
;
...
...
@@ -919,61 +1002,54 @@ static unsigned char *option_put_string(unsigned char *p, unsigned char *end, in
return
p
;
}
static
unsigned
char
*
option_find1
(
unsigned
char
*
p
,
unsigned
char
*
end
,
int
opt
,
int
*
overload
)
static
unsigned
char
*
option_find1
(
unsigned
char
*
p
,
unsigned
char
*
end
,
int
opt
,
int
minsize
)
{
if
(
!
p
)
return
NULL
;
while
(
*
p
!=
OPTION_END
)
{
if
(
p
>=
end
)
return
0
;
/* malformed packet */
return
NULL
;
/* malformed packet */
else
if
(
*
p
==
OPTION_PAD
)
p
++
;
else
if
(
*
p
==
OPTION_OVERLOAD
)
{
if
(
p
>=
end
-
3
)
return
0
;
/* malformed packet */
if
(
overload
)
*
overload
=
*
(
p
+
2
);
p
+=
3
;
}
else
{
int
opt_len
;
;
int
opt_len
;
if
(
p
>=
end
-
2
)
return
0
;
/* malformed packet */
return
NULL
;
/* malformed packet */
opt_len
=
option_len
(
p
);
if
(
p
>=
end
-
(
2
+
opt_len
))
return
0
;
/* malformed packet */
if
(
*
p
==
opt
)
return
NULL
;
/* malformed packet */
if
(
*
p
==
opt
&&
opt_len
>=
minsize
)
return
p
;
p
+=
opt_len
+
2
;
}
}
return
NULL
;
return
opt
==
OPTION_END
?
p
:
NULL
;
}
static
unsigned
char
*
option_find
(
struct
dhcp_packet
*
mess
,
size_t
size
,
int
opt_type
,
int
minsize
)
{
int
overload
=
0
;
unsigned
char
*
ret
;
unsigned
char
*
ret
,
*
opt
;
/* skip over DHCP cookie; */
ret
=
option_find1
(
&
mess
->
options
[
0
]
+
sizeof
(
u32
),
((
unsigned
char
*
)
mess
)
+
size
,
opt_type
,
&
overload
);
if
(
!
ret
&&
(
overload
&
1
))
ret
=
option_find1
(
&
mess
->
file
[
0
],
&
mess
->
file
[
128
],
opt_type
,
&
overload
);
if
((
ret
=
option_find1
(
&
mess
->
options
[
0
]
+
sizeof
(
u32
),
((
unsigned
char
*
)
mess
)
+
size
,
opt_type
,
minsize
)))
return
ret
;
if
(
!
ret
&&
(
overload
&
2
))
ret
=
option_find1
(
&
mess
->
sname
[
0
],
&
mess
->
file
[
64
],
opt_type
,
&
overload
);
/* look for overload option. */
if
(
!
(
opt
=
option_find1
(
&
mess
->
options
[
0
]
+
sizeof
(
u32
),
((
unsigned
char
*
)
mess
)
+
size
,
OPTION_OVERLOAD
,
1
)))
return
NULL
;
/* Check the option field is big enough */
if
(
ret
&&
(
option_len
(
ret
)
<
minsize
))
ret
=
NULL
;
/* Can we look in filename area ? */
if
((
option_uint
(
opt
,
1
)
&
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
)
&&
(
ret
=
option_find1
(
&
mess
->
sname
[
0
],
&
mess
->
sname
[
64
],
opt_type
,
minsize
)))
return
ret
;
return
NULL
;
}
static
int
in_list
(
unsigned
char
*
list
,
int
opt
)
...
...
@@ -1055,9 +1131,6 @@ static unsigned char *do_req_options(struct dhcp_context *context,
struct
dhcp_opt
*
opt
,
*
config_opts
=
daemon
->
dhcp_opts
;
char
*
vendor_class
=
NULL
;
if
(
in_list
(
req_options
,
OPTION_MAXMESSAGE
))
p
=
option_put
(
p
,
end
,
OPTION_MAXMESSAGE
,
2
,
end
-
(
unsigned
char
*
)
daemon
->
dhcp_packet
);
/* 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
));
...
...
src/util.c
View file @
5e9e0efb
...
...
@@ -15,6 +15,10 @@
#include "dnsmasq.h"
#ifdef HAVE_BROKEN_RTC
#include <sys/times.h>
#endif
/* Prefer arc4random(3) over random(3) over rand(3) */
/* Also prefer /dev/urandom over /dev/random, to preserve the entropy pool */
#ifdef HAVE_ARC4RANDOM
...
...
@@ -186,13 +190,12 @@ int sockaddr_isequal(union mysockaddr *s1, union mysockaddr *s2)
{
if
(
s1
->
sa
.
sa_family
==
AF_INET
&&
s1
->
in
.
sin_port
==
s2
->
in
.
sin_port
&&
memcmp
(
&
s1
->
in
.
sin_addr
,
&
s2
->
in
.
sin_addr
,
sizeof
(
struct
in_addr
))
==
0
)
s1
->
in
.
sin_addr
.
s_addr
==
s2
->
in
.
sin_addr
.
s_addr
)
return
1
;
#ifdef HAVE_IPV6
if
(
s1
->
sa
.
sa_family
==
AF_INET6
&&
s1
->
in6
.
sin6_port
==
s2
->
in6
.
sin6_port
&&
s1
->
in6
.
sin6_flowinfo
==
s2
->
in6
.
sin6_flowinfo
&&
memcmp
(
&
s1
->
in6
.
sin6_addr
,
&
s2
->
in6
.
sin6_addr
,
sizeof
(
struct
in6_addr
))
==
0
)
IN6_ARE_ADDR_EQUAL
(
&
s1
->
in6
.
sin6_addr
,
&
s2
->
in6
.
sin6_addr
))
return
1
;
#endif
}
...
...
@@ -234,21 +237,17 @@ int hostname_isequal(char *a, char *b)
return
1
;
}
time_t
dnsmasq_time
(
int
f
d
)
time_t
dnsmasq_time
(
voi
d
)
{
#ifdef HAVE_BROKEN_RTC
/* we use uptime as a time-base, rather than epoch time
because epoch time can break when a machine contacts
a nameserver and updates it. */
char
buf
[
30
];
lseek
(
fd
,
0
,
SEEK_SET
);
read
(
fd
,
buf
,
30
);
/* ensure the time is terminated even if /proc/uptime sends something unexpected */
buf
[
29
]
=
0
;
read
(
fd
,
buf
,
30
);
return
(
time_t
)
atol
(
buf
);
struct
tms
dummy
;
static
long
tps
=
0
;
if
(
tps
==
0
)
tps
=
sysconf
(
_SC_CLK_TCK
);
return
(
time_t
)(
times
(
&
dummy
)
/
tps
);
#else
fd
=
0
;
/* stop warning */
return
time
(
NULL
);
#endif
}
...
...
@@ -361,3 +360,39 @@ int parse_hex(char *in, unsigned char *out, int maxlen,
return
i
;
}
int
memcmp_masked
(
unsigned
char
*
a
,
unsigned
char
*
b
,
int
len
,
unsigned
int
mask
)
{
int
i
;
for
(
i
=
len
-
1
;
i
>=
0
;
i
--
,
mask
=
mask
>>
1
)
if
(
!
(
mask
&
1
)
&&
a
[
i
]
!=
b
[
i
])
return
0
;
return
1
;
}
/* _note_ may copy buffer */
int
expand_buf
(
struct
iovec
*
iov
,
size_t
size
)
{
void
*
new
;
if
(
size
<=
iov
->
iov_len
)
return
1
;
if
(
!
(
new
=
malloc
(
size
)))
{
errno
=
ENOMEM
;
return
0
;
}
if
(
iov
->
iov_base
)
{
memcpy
(
new
,
iov
->
iov_base
,
iov
->
iov_len
);
free
(
iov
->
iov_base
);
}
iov
->
iov_base
=
new
;
iov
->
iov_len
=
size
;
return
1
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment