mirror of
http://thekelleys.org.uk/git/dnsmasq.git
synced 2026-11-04 13:48:30 +00:00
Compare commits
21
Commits
v2.61rc2
...
v2.62test2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c64b7f6a78 | ||
|
|
068b4b51e3 | ||
|
|
919dd7cf14 | ||
|
|
f632e56793 | ||
|
|
2021c66251 | ||
|
|
8358e0f4b2 | ||
|
|
7f61b3ad59 | ||
|
|
a9ab732e35 | ||
|
|
11263a462c | ||
|
|
231d061b45 | ||
|
|
cdbee9a40b | ||
|
|
7b4ad2eb34 | ||
|
|
19d69be220 | ||
|
|
04363607aa | ||
|
|
dcffad2a86 | ||
|
|
6a69ab5ebd | ||
|
|
fc92ead0dd | ||
|
|
61ce600b20 | ||
|
|
7a14dfebbb | ||
|
|
42fb8153ba | ||
|
|
6f13e53886 |
No files matched your search
@@ -1,3 +1,18 @@
|
||||
version 2.62
|
||||
Update German translation. Thanks to Conrad Kostecki.
|
||||
|
||||
Cope with router-solict packets wich don't have a valid
|
||||
source address. Thanks to Vladislav Grishenko for the patch.
|
||||
|
||||
Fixed bug which caused missing periodic router
|
||||
advertisements with some configurations. Thanks to
|
||||
Vladislav Grishenko for the patch.
|
||||
|
||||
Fixed bug which broke DHCPv6/RA with prefix lengths
|
||||
which are not divisible by 8. Thanks to Andre Coetzee
|
||||
for spotting this.
|
||||
|
||||
|
||||
version 2.61
|
||||
Re-write interface discovery code on *BSD to use
|
||||
getifaddrs. This is more portable, more straightforward,
|
||||
@@ -16,7 +31,7 @@ version 2.61
|
||||
Explicity send DHCPv6 replies to the correct port, instead
|
||||
of relying on clients to send requests with the correct
|
||||
source address, since at least one client in the wild gets
|
||||
this wrong. Thanks to Conrda Kostecki for help tracking
|
||||
this wrong. Thanks to Conrad Kostecki for help tracking
|
||||
this down.
|
||||
|
||||
Send a preference value of 255 in DHCPv6 replies when
|
||||
@@ -68,7 +83,7 @@ version 2.61
|
||||
renumbering at least possible.
|
||||
|
||||
Fix bug in address6_available() which caused DHCPv6 lease
|
||||
aquistion to fail if more than one dhcp-range in use.
|
||||
aquisition to fail if more than one dhcp-range in use.
|
||||
|
||||
Provide RDNSS and DNSSL data in router advertisements,
|
||||
using the settings provided for DHCP options
|
||||
@@ -82,7 +97,7 @@ version 2.61
|
||||
name. Thanks to Ben Winslow for finding this.
|
||||
|
||||
Call SO_BINDTODEVICE on the DHCP socket(s) when doing DHCP
|
||||
on exacly one interface and --bind-interfaces is set. This
|
||||
on exactly one interface and --bind-interfaces is set. This
|
||||
makes the OpenStack use-case of one dnsmasq per virtual
|
||||
interface work. This is only available on Linux; it's not
|
||||
supported on other platforms. Thanks to Vishvananda Ishaya
|
||||
@@ -93,6 +108,17 @@ version 2.61
|
||||
Give correct from-cache answers to explict CNAME queries.
|
||||
Thanks to Rob Zwissler for spotting this.
|
||||
|
||||
Add --tftp-lowercase option. Thanks to Oliver Rath for the
|
||||
patch.
|
||||
|
||||
Ensure that the DBus DhcpLeaseUpdated events are generated
|
||||
when a lease goes through INIT_REBOOT state, even if the
|
||||
dhcp-script is not in use. Thanks to Antoaneta-Ecaterina
|
||||
Ene for the patch.
|
||||
|
||||
Fix failure of TFTP over IPv4 on OpenBSD platform. Thanks
|
||||
to Brad Smith for spotting this.
|
||||
|
||||
|
||||
version 2.60
|
||||
Fix compilation problem in Mac OS X Lion. Thanks to Olaf
|
||||
|
||||
Vendored
+6
@@ -1,3 +1,9 @@
|
||||
dnsmasq (2.62-1) unstable; urgency=low
|
||||
|
||||
* New upstream.
|
||||
|
||||
-- Simon Kelley <simon@thekelleys.org.uk> Sat, 12 May 2012 15:25:23 +0000
|
||||
|
||||
dnsmasq (2.61-1) unstable; urgency=low
|
||||
|
||||
* New upstream.
|
||||
|
||||
@@ -1385,6 +1385,12 @@ are accessible. It is not recommended to run dnsmasq as root with TFTP
|
||||
enabled, and certainly not without specifying --tftp-root. Doing so
|
||||
can expose any world-readable file on the server to any host on the net.
|
||||
.TP
|
||||
.B --tftp-lowercase
|
||||
Convert filenames in TFTP requests to all lowercase. This is useful
|
||||
for requests from Windows machines, which have case-insensitive
|
||||
filesystems and tend to play fast-and-loose with case in filenames.
|
||||
Note that dnsmasq's tftp server always converts "\\" to "/" in filenames.
|
||||
.TP
|
||||
.B --tftp-max=<connections>
|
||||
Set the maximum number of concurrent TFTP connections allowed. This
|
||||
defaults to 50. When serving a large number of TFTP connections,
|
||||
|
||||
@@ -12,8 +12,8 @@ msgstr ""
|
||||
"Project-Id-Version: dnsmasq 2.53rc1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2009-06-18 12:24+0100\n"
|
||||
"PO-Revision-Date: 2010-05-24 16:29+0200\n"
|
||||
"Last-Translator: Matthias Andree <matthias.andree@gmx.de>\n"
|
||||
"PO-Revision-Date: 2012-04-05 17:54+0100\n"
|
||||
"Last-Translator: Conrad Kostecki <ConiKost@gmx.de>\n"
|
||||
"Language-Team: German <de@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@@ -25,17 +25,20 @@ msgstr ""
|
||||
msgid "failed to load names from %s: %s"
|
||||
msgstr "Fehler beim Laden der Namen von %s: %s"
|
||||
|
||||
#: cache.c:797 dhcp.c:855
|
||||
#: cache.c:797
|
||||
#: dhcp.c:855
|
||||
#, c-format
|
||||
msgid "bad address at %s line %d"
|
||||
msgstr "Fehlerhafte Adresse in %s Zeile %d"
|
||||
|
||||
#: cache.c:846 dhcp.c:871
|
||||
#: cache.c:846
|
||||
#: dhcp.c:871
|
||||
#, c-format
|
||||
msgid "bad name at %s line %d"
|
||||
msgstr "Fehlerhafter Name in %s Zeile %d"
|
||||
|
||||
#: cache.c:853 dhcp.c:946
|
||||
#: cache.c:853
|
||||
#: dhcp.c:946
|
||||
#, c-format
|
||||
msgid "read %s - %d addresses"
|
||||
msgstr "%s gelesen - %d Adressen"
|
||||
@@ -47,7 +50,7 @@ msgstr "Cache geleert"
|
||||
#: cache.c:953
|
||||
#, c-format
|
||||
msgid "No IPv4 address found for %s"
|
||||
msgstr ""
|
||||
msgstr "Keine IPv4-Adresse für %s gefunden"
|
||||
|
||||
#: cache.c:1005
|
||||
#, c-format
|
||||
@@ -88,7 +91,8 @@ msgstr "Konnte den Zufallszahlengenerator nicht initialisieren: %s"
|
||||
msgid "failed to allocate memory"
|
||||
msgstr "Konnte Speicher nicht belegen"
|
||||
|
||||
#: util.c:227 option.c:717
|
||||
#: util.c:227
|
||||
#: option.c:717
|
||||
msgid "could not get memory"
|
||||
msgstr "Speicher nicht verfügbar"
|
||||
|
||||
@@ -171,19 +175,16 @@ msgid "Set address or hostname for a specified machine."
|
||||
msgstr "Adresse oder Hostnamen für einen angegebenen Computer setzen."
|
||||
|
||||
#: option.c:268
|
||||
#, fuzzy
|
||||
msgid "Read DHCP host specs from file."
|
||||
msgstr "DHCP-Host-Angaben aus Datei lesen"
|
||||
msgstr "DHCP-Host-Angaben aus Datei lesen."
|
||||
|
||||
#: option.c:269
|
||||
#, fuzzy
|
||||
msgid "Read DHCP option specs from file."
|
||||
msgstr "DHCP-Optionen aus Datei lesen"
|
||||
msgstr "DHCP-Optionen aus Datei lesen."
|
||||
|
||||
#: option.c:270
|
||||
#, fuzzy
|
||||
msgid "Evaluate conditional tag expression."
|
||||
msgstr "Auswertung eines Ausdrucks bedingter Marken"
|
||||
msgstr "Auswertung eines Ausdrucks bedingter Marken."
|
||||
|
||||
#: option.c:271
|
||||
#, c-format
|
||||
@@ -325,7 +326,6 @@ msgid "Specify time-to-live in seconds for negative caching."
|
||||
msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
|
||||
|
||||
#: option.c:304
|
||||
#, fuzzy
|
||||
msgid "Specify time-to-live in seconds for maximum TTL to send to clients."
|
||||
msgstr "Gültigkeitsdauer in Sekunden für Caching negativer Ergebnisse festlegen."
|
||||
|
||||
@@ -414,17 +414,14 @@ msgid "Disable ICMP echo address checking in the DHCP server."
|
||||
msgstr "ICMP-Echo-Adressprüfung im DHCP-Server abschalten."
|
||||
|
||||
#: option.c:325
|
||||
#, fuzzy
|
||||
msgid "Shell script to run on DHCP lease creation and destruction."
|
||||
msgstr "Skript, das bei Erzeugung/Löschung einer DHCP-Lease laufen soll."
|
||||
|
||||
#: option.c:326
|
||||
#, fuzzy
|
||||
msgid "Lua script to run on DHCP lease creation and destruction."
|
||||
msgstr "Skript, das bei Erzeugung/Löschung einer DHCP-Lease laufen soll."
|
||||
msgstr "Lua-Skript, welches bei Erzeugung/Löschung eines DHCP-Leases laufen soll."
|
||||
|
||||
#: option.c:327
|
||||
#, fuzzy
|
||||
msgid "Run lease-change scripts as this user."
|
||||
msgstr "Lease-Änderungs-Skript mit den Rechten dieses Nutzers ausführen."
|
||||
|
||||
@@ -504,7 +501,6 @@ msgid "Allow rebinding of 127.0.0.0/8, for RBL servers."
|
||||
msgstr "Auflösung zu 127.0.0.0/8 erlauben, für RBL-Server."
|
||||
|
||||
#: option.c:346
|
||||
#, fuzzy
|
||||
msgid "Inhibit DNS-rebind protection on this domain."
|
||||
msgstr "DNS-Rebind-Schutz für diese Domäne sperren."
|
||||
|
||||
@@ -534,9 +530,8 @@ msgstr "Für DHCP-Klienten nur vollständig bestimmte Domänennamen benutzen."
|
||||
|
||||
# FIXME: probably typo in original message. -- MA
|
||||
#: option.c:353
|
||||
#, fuzzy
|
||||
msgid "Generate hostnames based on MAC address for nameless clients."
|
||||
msgstr "Für namenlose Klienten die Hostnamen MAC-basiert erzeugen."
|
||||
msgstr "Generiere Hostnamen auf Basis der MAC-Adresse für namenlose Klienten."
|
||||
|
||||
#: option.c:354
|
||||
msgid "Use these DHCP relays as full proxies."
|
||||
@@ -560,28 +555,27 @@ msgstr "Konfigurationssyntax prüfen."
|
||||
|
||||
#: option.c:359
|
||||
msgid "Add requestor's MAC address to forwarded DNS queries."
|
||||
msgstr ""
|
||||
msgstr "Anfragende MAC-Adresse in die weiterleitende DNS-Anfrage einfügen"
|
||||
|
||||
#: option.c:360
|
||||
#, fuzzy
|
||||
msgid "Proxy DNSSEC validation results from upstream nameservers."
|
||||
msgstr "IPv4-Adressen von vorgelagerten Servern übersetzen."
|
||||
msgstr "Proxy-DNSSEC-Validierung-Ergebnisse von Upstream-Namensservern."
|
||||
|
||||
#: option.c:361
|
||||
msgid "Attempt to allocate sequential IP addresses to DHCP clients."
|
||||
msgstr ""
|
||||
msgstr "Versuche sequenzielle IP-Adressen an DHCP-Klienten zu vergeben."
|
||||
|
||||
#: option.c:362
|
||||
msgid "Copy connection-track mark from queries to upstream connections."
|
||||
msgstr ""
|
||||
msgstr "Kopiere \"connection-track mark\" von Anfragen nach Upstream-Verbindungen."
|
||||
|
||||
#: option.c:363
|
||||
msgid "Allow DHCP clients to do their own DDNS updates."
|
||||
msgstr ""
|
||||
msgstr "Erlaube DHCP-Klienten ihre eigenen DDNS-Updates durchzuführen."
|
||||
|
||||
#: option.c:364
|
||||
msgid "Send router-advertisements for interfaces doing DHCPv6"
|
||||
msgstr ""
|
||||
msgstr "Sende \"Router-Advertisments\" für Netzwerkschnittstellen, welche DHCPv6 nutzen"
|
||||
|
||||
#: option.c:782
|
||||
#, c-format
|
||||
@@ -608,13 +602,13 @@ msgid "Known DHCP options:\n"
|
||||
msgstr "Bekannte DHCP-Optionen:\n"
|
||||
|
||||
#: option.c:838
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "Known DHCPv6 options:\n"
|
||||
msgstr "Bekannte DHCP-Optionen:\n"
|
||||
msgstr "Bekannte DHCPv6-Optionen:\n"
|
||||
|
||||
#: option.c:973
|
||||
msgid "unsupported encapsulation for IPv6 option"
|
||||
msgstr ""
|
||||
msgstr "Nicht unterstützte Verkapselung für eine IPv6-Option"
|
||||
|
||||
#: option.c:1001
|
||||
msgid "bad dhcp-option"
|
||||
@@ -624,10 +618,11 @@ msgstr "Fehlerhafte DHCP-Option"
|
||||
msgid "bad IP address"
|
||||
msgstr "Fehlerhafte IP-Adresse"
|
||||
|
||||
#: option.c:1071 option.c:1177 option.c:2511
|
||||
#, fuzzy
|
||||
#: option.c:1071
|
||||
#: option.c:1177
|
||||
#: option.c:2511
|
||||
msgid "bad IPv6 address"
|
||||
msgstr "Fehlerhafte IP-Adresse"
|
||||
msgstr "Fehlerhafte IPv6-Adresse"
|
||||
|
||||
#: option.c:1205
|
||||
msgid "bad domain in dhcp-option"
|
||||
@@ -649,23 +644,25 @@ msgstr "unzulässig wiederholte Markierung"
|
||||
msgid "illegal repeated keyword"
|
||||
msgstr "unzulässig wiederholtes Schlüsselwort"
|
||||
|
||||
#: option.c:1452 option.c:3536
|
||||
#: option.c:1452
|
||||
#: option.c:3536
|
||||
#, c-format
|
||||
msgid "cannot access directory %s: %s"
|
||||
msgstr "Kann auf Verzeichnis %s nicht zugreifen: %s"
|
||||
|
||||
#: option.c:1483 tftp.c:464
|
||||
#: option.c:1483
|
||||
#: tftp.c:464
|
||||
#, c-format
|
||||
msgid "cannot access %s: %s"
|
||||
msgstr "Kann auf %s nicht zugreifen: %s"
|
||||
|
||||
#: option.c:1512
|
||||
msgid "setting log facility is not possible under Android"
|
||||
msgstr ""
|
||||
msgstr "Die Einstellung Protokolliereinrichtung kann unter Android nicht gesetzt werden"
|
||||
|
||||
#: option.c:1521
|
||||
msgid "bad log facility"
|
||||
msgstr ""
|
||||
msgstr "Falsche Protokolliereinrichtung"
|
||||
|
||||
#: option.c:1570
|
||||
msgid "bad MX preference"
|
||||
@@ -688,19 +685,21 @@ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
|
||||
msgstr "Neuübersetzung mit HAVE_SCRIPT nötig, um Lease-Änderungs-Skripte auszuführen"
|
||||
|
||||
#: option.c:1607
|
||||
#, fuzzy
|
||||
msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
|
||||
msgstr "Neuübersetzung mit HAVE_SCRIPT nötig, um Lease-Änderungs-Skripte auszuführen"
|
||||
msgstr "Um Benutzerdefinierte Lua-Scripte zu ermöglichen, muss mit HAVE_LUASCRIPT neu kompiliert werden"
|
||||
|
||||
#: option.c:1988 option.c:1992
|
||||
#: option.c:1988
|
||||
#: option.c:1992
|
||||
msgid "bad port"
|
||||
msgstr "unzulässiger Port"
|
||||
|
||||
#: option.c:2015 option.c:2046
|
||||
#: option.c:2015
|
||||
#: option.c:2046
|
||||
msgid "interface binding not supported"
|
||||
msgstr "Schnittstellenbindung nicht unterstützt"
|
||||
|
||||
#: option.c:2026 option.c:3088
|
||||
#: option.c:2026
|
||||
#: option.c:3088
|
||||
msgid "bad interface name"
|
||||
msgstr "unzulässiger Schnittestellenname"
|
||||
|
||||
@@ -726,20 +725,20 @@ msgstr "inkonsistenter DHCP-Bereich"
|
||||
|
||||
#: option.c:2374
|
||||
msgid "prefix must be at least 64"
|
||||
msgstr ""
|
||||
msgstr "Der Prefix muss mindestens 64 sein"
|
||||
|
||||
#: option.c:2378
|
||||
#, fuzzy
|
||||
msgid "inconsistent DHCPv6 range"
|
||||
msgstr "inkonsistenter DHCP-Bereich"
|
||||
msgstr "Inkonsistenter DHCPv6-Bereich"
|
||||
|
||||
#: option.c:2481 option.c:2521
|
||||
#: option.c:2481
|
||||
#: option.c:2521
|
||||
msgid "bad hex constant"
|
||||
msgstr ""
|
||||
msgstr "Falscher Hexwert"
|
||||
|
||||
#: option.c:2503
|
||||
msgid "cannot match tags in --dhcp-host"
|
||||
msgstr ""
|
||||
msgstr "Kann die Tags in --dhcp-host nicht abgleichen"
|
||||
|
||||
#: option.c:2583
|
||||
msgid "bad DHCP host name"
|
||||
@@ -749,7 +748,8 @@ msgstr "unzulässiger DHCP-Hostname"
|
||||
msgid "bad tag-if"
|
||||
msgstr "unzulässige bedingte Marke (tag-if)"
|
||||
|
||||
#: option.c:2973 option.c:3258
|
||||
#: option.c:2973
|
||||
#: option.c:3258
|
||||
msgid "invalid port number"
|
||||
msgstr "unzulässige Portnummer"
|
||||
|
||||
@@ -826,19 +826,21 @@ msgstr "Fehler"
|
||||
msgid "%s at line %d of %%s"
|
||||
msgstr "%s in Zeile %d von %%s"
|
||||
|
||||
#: option.c:3491 tftp.c:627
|
||||
#: option.c:3491
|
||||
#: tftp.c:627
|
||||
#, c-format
|
||||
msgid "cannot read %s: %s"
|
||||
msgstr "kann %s nicht lesen: %s"
|
||||
|
||||
#: option.c:3657 option.c:3693
|
||||
#: option.c:3657
|
||||
#: option.c:3693
|
||||
#, c-format
|
||||
msgid "read %s"
|
||||
msgstr "%s gelesen"
|
||||
|
||||
#: option.c:3745
|
||||
msgid "junk found in command line"
|
||||
msgstr ""
|
||||
msgstr "Mist in der Kommandozeile gefunden"
|
||||
|
||||
#: option.c:3780
|
||||
#, c-format
|
||||
@@ -846,12 +848,12 @@ msgid "Dnsmasq version %s %s\n"
|
||||
msgstr "Dnsmasq Version %s %s\n"
|
||||
|
||||
#: option.c:3781
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Compile time options: %s\n"
|
||||
"\n"
|
||||
msgstr ""
|
||||
"Übersetzungs-Optionen %s\n"
|
||||
"Kompilierungs-Optionen %s\n"
|
||||
"\n"
|
||||
|
||||
#: option.c:3782
|
||||
@@ -863,12 +865,12 @@ msgstr "Für diese Software wird ABSOLUT KEINE GARANTIE gewährt.\n"
|
||||
#: option.c:3783
|
||||
#, c-format
|
||||
msgid "Dnsmasq is free software, and you are welcome to redistribute it\n"
|
||||
msgstr ""
|
||||
msgstr "Dnsmasq ist freie Software, und du bist willkommen es weiter zu verteilen\n"
|
||||
|
||||
#: option.c:3784
|
||||
#, c-format
|
||||
msgid "under the terms of the GNU General Public License, version 2 or 3.\n"
|
||||
msgstr ""
|
||||
msgstr "unter den Bedingungen der GNU General Public Lizenz, Version 2 oder 3.\n"
|
||||
|
||||
#: option.c:3795
|
||||
msgid "try --help"
|
||||
@@ -896,7 +898,9 @@ msgstr "mit -n/--no-poll ist nur eine resolv.conf-Datei zulässig."
|
||||
msgid "must have exactly one resolv.conf to read domain from."
|
||||
msgstr "Um die Domäne zu lesen, muss genau eine resolv.conf-Datei verwendet werden."
|
||||
|
||||
#: option.c:3882 network.c:822 dhcp.c:804
|
||||
#: option.c:3882
|
||||
#: network.c:822
|
||||
#: dhcp.c:804
|
||||
#, c-format
|
||||
msgid "failed to read %s: %s"
|
||||
msgstr "konnte %s nicht lesen: %s"
|
||||
@@ -907,18 +911,17 @@ msgid "no search directive found in %s"
|
||||
msgstr "keine \"search\"-Anweisung in %s gefunden"
|
||||
|
||||
#: option.c:3920
|
||||
#, fuzzy
|
||||
msgid "there must be a default domain when --dhcp-fqdn is set"
|
||||
msgstr "für --dhcp-fqdn muss eine Domäne vorausgewählt werden"
|
||||
msgstr "Es muss eine standard Domain gesetzt sein, wenn --dhcp-fqdn gesetzt ist"
|
||||
|
||||
#: option.c:3924
|
||||
msgid "syntax check OK"
|
||||
msgstr "Syntaxprüfung OK"
|
||||
|
||||
#: forward.c:113
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "failed to send packet: %s"
|
||||
msgstr "konnte Socket nicht zum Empfang einrichten: %s"
|
||||
msgstr "Fehlgeschlagen, folgendes Paket zu senden: %s"
|
||||
|
||||
#: forward.c:474
|
||||
#, c-format
|
||||
@@ -931,9 +934,9 @@ msgid "possible DNS-rebind attack detected: %s"
|
||||
msgstr "möglichen DNS-Rebind-Angriff entdeckt: %s"
|
||||
|
||||
#: network.c:355
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "failed to create listening socket for %s: %s"
|
||||
msgstr "Konnte Empfangs-Socket nicht erzeugen: %s"
|
||||
msgstr "Konnte Empfangs-Socket für %s: %s nicht erzeugen"
|
||||
|
||||
#: network.c:720
|
||||
#, c-format
|
||||
@@ -953,44 +956,44 @@ msgstr "ignoriere Namensserver %s - kann Socket nicht erzeugen/binden: %s"
|
||||
# FIXME: this isn't translatable - always provide full strings, do not assemble yourself! -- MA
|
||||
#: network.c:785
|
||||
msgid "unqualified"
|
||||
msgstr ""
|
||||
msgstr "unqualifiziert"
|
||||
|
||||
#: network.c:785
|
||||
msgid "names"
|
||||
msgstr ""
|
||||
msgstr "Namen"
|
||||
|
||||
#: network.c:787
|
||||
msgid "default"
|
||||
msgstr ""
|
||||
msgstr "Standard"
|
||||
|
||||
#: network.c:789
|
||||
msgid "domain"
|
||||
msgstr ""
|
||||
msgstr "Domain"
|
||||
|
||||
#: network.c:792
|
||||
#, c-format
|
||||
msgid "using local addresses only for %s %s"
|
||||
msgstr ""
|
||||
msgstr "Benutze lokale Adressen nur für %s %s"
|
||||
|
||||
#: network.c:794
|
||||
#, c-format
|
||||
msgid "using standard nameservers for %s %s"
|
||||
msgstr ""
|
||||
msgstr "Benutze standard Namensserver für %s %s"
|
||||
|
||||
#: network.c:796
|
||||
#, c-format
|
||||
msgid "using nameserver %s#%d for %s %s"
|
||||
msgstr ""
|
||||
msgstr "Benutze Namensserver %s#%d für %s %s"
|
||||
|
||||
#: network.c:799
|
||||
#, c-format
|
||||
msgid "using nameserver %s#%d(via %s)"
|
||||
msgstr ""
|
||||
msgstr "Benutze Namensserver %s#%d(via %s)"
|
||||
|
||||
#: network.c:801
|
||||
#, c-format
|
||||
msgid "using nameserver %s#%d"
|
||||
msgstr ""
|
||||
msgstr "Benutze Namensserver %s#%d"
|
||||
|
||||
#: dnsmasq.c:123
|
||||
msgid "TFTP server not available: set HAVE_TFTP in src/config.h"
|
||||
@@ -998,21 +1001,19 @@ msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h"
|
||||
|
||||
#: dnsmasq.c:128
|
||||
msgid "Cannot use --conntrack AND --query-port"
|
||||
msgstr ""
|
||||
msgstr "Kann nicht --conntrack UND --query-port einsetzen"
|
||||
|
||||
#: dnsmasq.c:131
|
||||
#, fuzzy
|
||||
msgid "Conntrack support not available: set HAVE_CONNTRACK in src/config.h"
|
||||
msgstr "TFTP-Server nicht verfügbar, setzen Sie HAVE_TFTP in src/config.h"
|
||||
msgstr "Conntrack-Unterstützung nicht verfügbar: setze HAVE_CONNTRACK in src/config.h"
|
||||
|
||||
#: dnsmasq.c:136
|
||||
msgid "asychronous logging is not available under Solaris"
|
||||
msgstr "asynchrone Protokollierung unter Solaris nicht verfügbar"
|
||||
|
||||
#: dnsmasq.c:141
|
||||
#, fuzzy
|
||||
msgid "asychronous logging is not available under Android"
|
||||
msgstr "asynchrone Protokollierung unter Solaris nicht verfügbar"
|
||||
msgstr "Asynchrone Protokollierung unter Android nicht verfügbar"
|
||||
|
||||
#: dnsmasq.c:190
|
||||
#, c-format
|
||||
@@ -1029,7 +1030,8 @@ msgstr "unbekannte Schnittstelle %s"
|
||||
msgid "no interface with address %s"
|
||||
msgstr "keine Schnittstelle mit Adresse %s"
|
||||
|
||||
#: dnsmasq.c:220 dnsmasq.c:770
|
||||
#: dnsmasq.c:220
|
||||
#: dnsmasq.c:770
|
||||
#, c-format
|
||||
msgid "DBus error: %s"
|
||||
msgstr "DBus-Fehler: %s"
|
||||
@@ -1062,7 +1064,7 @@ msgstr "gestartet, Version %s, Cachegröße %d"
|
||||
#: dnsmasq.c:485
|
||||
#, c-format
|
||||
msgid "started, version %s cache disabled"
|
||||
msgstr ""
|
||||
msgstr "Gestartet, Version %s Cache deaktiviert"
|
||||
|
||||
#: dnsmasq.c:487
|
||||
#, c-format
|
||||
@@ -1106,7 +1108,7 @@ msgstr "asynchrone Protokollierung eingeschaltet, Warteschlange fasst %d Nachric
|
||||
|
||||
#: dnsmasq.c:524
|
||||
msgid "IPv6 router advertisement enabled"
|
||||
msgstr ""
|
||||
msgstr "IPv6-Router-Advertisement aktiviert"
|
||||
|
||||
#: dnsmasq.c:554
|
||||
#, c-format
|
||||
@@ -1114,9 +1116,9 @@ msgid "DHCP, static leases only on %.0s%s, lease time %s"
|
||||
msgstr "DHCP, nur statische Leases auf %.0s%s, Lease-Zeit %s"
|
||||
|
||||
#: dnsmasq.c:556
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "router advertisement only on %.0s%s, lifetime %s"
|
||||
msgstr "DHCP, nur statische Leases auf %.0s%s, Lease-Zeit %s"
|
||||
msgstr "Router-Advertisment nur auf %.0s%s, Lebenszeit %s"
|
||||
|
||||
#: dnsmasq.c:558
|
||||
#, c-format
|
||||
@@ -1131,15 +1133,15 @@ msgstr "DHCP, IP-Bereich %s - %s, Lease-Zeit %s "
|
||||
# FIXME: this and the next few must be full strings to be translatable - do not assemble in code"
|
||||
#: dnsmasq.c:588
|
||||
msgid "root is "
|
||||
msgstr ""
|
||||
msgstr "Wurzel ist"
|
||||
|
||||
#: dnsmasq.c:588
|
||||
msgid "enabled"
|
||||
msgstr ""
|
||||
msgstr "Aktiviert"
|
||||
|
||||
#: dnsmasq.c:590
|
||||
msgid "secure mode"
|
||||
msgstr ""
|
||||
msgstr "sicherer Modus"
|
||||
|
||||
#: dnsmasq.c:616
|
||||
#, c-format
|
||||
@@ -1181,24 +1183,24 @@ msgid "failed to open pidfile %s: %s"
|
||||
msgstr "kann die Prozessidentifikations-(PID)-Datei %s nicht öffnen: %s"
|
||||
|
||||
#: dnsmasq.c:930
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot open log %s: %s"
|
||||
msgstr "kann %s nicht öffnen: %s"
|
||||
msgstr "Kann Logdatei %s nicht öffnen: %s"
|
||||
|
||||
#: dnsmasq.c:933
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "failed to load Lua script: %s"
|
||||
msgstr "konnte %s nicht lesen: %s"
|
||||
msgstr "Konnte Lua-Script nicht laden: %s"
|
||||
|
||||
#: dnsmasq.c:1002
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "script process killed by signal %d"
|
||||
msgstr "Tochterprozess durch Signal %d zerstört"
|
||||
msgstr "Scriptprozess durch Signal %d getötet"
|
||||
|
||||
#: dnsmasq.c:1006
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "script process exited with status %d"
|
||||
msgstr "Tochterprozess beendete sich mit Status %d"
|
||||
msgstr "Scriptprozess hat sich mit Status %d beendet"
|
||||
|
||||
#: dnsmasq.c:1010
|
||||
#, c-format
|
||||
@@ -1309,22 +1311,23 @@ msgstr "Ignoriere Domäne %s für DHCP-Hostnamen %s"
|
||||
#: rfc2131.c:337
|
||||
#, c-format
|
||||
msgid "no address range available for DHCP request %s %s"
|
||||
msgstr ""
|
||||
msgstr "Kein verfügbarer DHCP-Bereich für Anfrage %s %s"
|
||||
|
||||
#: rfc2131.c:338
|
||||
msgid "with subnet selector"
|
||||
msgstr ""
|
||||
msgstr "mit Subnetz-Wähler"
|
||||
|
||||
#: rfc2131.c:338
|
||||
msgid "via"
|
||||
msgstr ""
|
||||
msgstr "via"
|
||||
|
||||
#: rfc2131.c:350
|
||||
#, c-format
|
||||
msgid "%u available DHCP subnet: %s/%s"
|
||||
msgstr "%u verfügbare(s) DHCP-Subnetz: %s/%s"
|
||||
|
||||
#: rfc2131.c:353 rfc3315.c:209
|
||||
#: rfc2131.c:353
|
||||
#: rfc3315.c:209
|
||||
#, c-format
|
||||
msgid "%u available DHCP range: %s -- %s"
|
||||
msgstr "%u verfügbare(r) DHCP-Bereich: %s - %s"
|
||||
@@ -1332,33 +1335,40 @@ msgstr "%u verfügbare(r) DHCP-Bereich: %s - %s"
|
||||
# FIXME: do not programmatically assemble strings - untranslatable
|
||||
#: rfc2131.c:382
|
||||
msgid "disabled"
|
||||
msgstr ""
|
||||
msgstr "deaktiviert"
|
||||
|
||||
#: rfc2131.c:423 rfc2131.c:941 rfc2131.c:1341
|
||||
#: rfc2131.c:423
|
||||
#: rfc2131.c:941
|
||||
#: rfc2131.c:1341
|
||||
msgid "ignored"
|
||||
msgstr ""
|
||||
msgstr "ignoriert"
|
||||
|
||||
#: rfc2131.c:438 rfc2131.c:1179
|
||||
#: rfc2131.c:438
|
||||
#: rfc2131.c:1179
|
||||
msgid "address in use"
|
||||
msgstr ""
|
||||
msgstr "Adresse in Nutzung"
|
||||
|
||||
#: rfc2131.c:452 rfc2131.c:995
|
||||
#: rfc2131.c:452
|
||||
#: rfc2131.c:995
|
||||
msgid "no address available"
|
||||
msgstr ""
|
||||
msgstr "Keine Adresse verfügbar"
|
||||
|
||||
#: rfc2131.c:459 rfc2131.c:1142
|
||||
#: rfc2131.c:459
|
||||
#: rfc2131.c:1142
|
||||
msgid "wrong network"
|
||||
msgstr ""
|
||||
msgstr "Falsches Netzwerk"
|
||||
|
||||
#: rfc2131.c:474
|
||||
msgid "no address configured"
|
||||
msgstr ""
|
||||
msgstr "Keine Adresse konfiguriert"
|
||||
|
||||
#: rfc2131.c:480 rfc2131.c:1192
|
||||
#: rfc2131.c:480
|
||||
#: rfc2131.c:1192
|
||||
msgid "no leases left"
|
||||
msgstr ""
|
||||
msgstr "Keine Leases übrig"
|
||||
|
||||
#: rfc2131.c:564 rfc3315.c:362
|
||||
#: rfc2131.c:564
|
||||
#: rfc3315.c:362
|
||||
#, c-format
|
||||
msgid "%u client provides name: %s"
|
||||
msgstr "%u Klient stellt Name bereit: %s"
|
||||
@@ -1377,7 +1387,8 @@ msgstr "%u Benutzerklasse: %s"
|
||||
msgid "PXE BIS not supported"
|
||||
msgstr "PXE BIS nicht unterstützt"
|
||||
|
||||
#: rfc2131.c:911 rfc3315.c:1098
|
||||
#: rfc2131.c:911
|
||||
#: rfc3315.c:1098
|
||||
#, c-format
|
||||
msgid "disabling DHCP static address %s for %s"
|
||||
msgstr "schalte statische DHCP-Adresse %s für %s ab"
|
||||
@@ -1385,9 +1396,10 @@ msgstr "schalte statische DHCP-Adresse %s für %s ab"
|
||||
# FIXME: do not assemble
|
||||
#: rfc2131.c:932
|
||||
msgid "unknown lease"
|
||||
msgstr ""
|
||||
msgstr "Unbekannter Lease"
|
||||
|
||||
#: rfc2131.c:964 rfc3315.c:556
|
||||
#: rfc2131.c:964
|
||||
#: rfc3315.c:556
|
||||
#, c-format
|
||||
msgid "not using configured address %s because it is leased to %s"
|
||||
msgstr "benutze konfigurierte Adresse %s nicht, weil sie an %s verleast ist"
|
||||
@@ -1397,39 +1409,41 @@ msgstr "benutze konfigurierte Adresse %s nicht, weil sie an %s verleast ist"
|
||||
msgid "not using configured address %s because it is in use by the server or relay"
|
||||
msgstr "benutze konfigurierte Adresse %s nicht, weil sie von Server/Relais verwendet wird"
|
||||
|
||||
#: rfc2131.c:977 rfc3315.c:560
|
||||
#: rfc2131.c:977
|
||||
#: rfc3315.c:560
|
||||
#, c-format
|
||||
msgid "not using configured address %s because it was previously declined"
|
||||
msgstr "benutze konfigurierte Adresse %s nicht, weil sie zuvor abgelehnt wurde"
|
||||
|
||||
# FIXME: do not assemble
|
||||
#: rfc2131.c:993 rfc2131.c:1185
|
||||
#: rfc2131.c:993
|
||||
#: rfc2131.c:1185
|
||||
msgid "no unique-id"
|
||||
msgstr ""
|
||||
msgstr "Keine eindeutige ID"
|
||||
|
||||
#: rfc2131.c:1080
|
||||
msgid "wrong server-ID"
|
||||
msgstr ""
|
||||
msgstr "Falsche Server-ID"
|
||||
|
||||
#: rfc2131.c:1099
|
||||
msgid "wrong address"
|
||||
msgstr ""
|
||||
msgstr "Falsche Adresse"
|
||||
|
||||
#: rfc2131.c:1117
|
||||
msgid "lease not found"
|
||||
msgstr ""
|
||||
msgstr "Lease nicht gefunden"
|
||||
|
||||
#: rfc2131.c:1150
|
||||
msgid "address not available"
|
||||
msgstr ""
|
||||
msgstr "Adresse nicht verfügbar"
|
||||
|
||||
#: rfc2131.c:1161
|
||||
msgid "static lease available"
|
||||
msgstr ""
|
||||
msgstr "Statischer Lease verfügbar"
|
||||
|
||||
#: rfc2131.c:1165
|
||||
msgid "address reserved"
|
||||
msgstr ""
|
||||
msgstr "Adresse reserviert"
|
||||
|
||||
#: rfc2131.c:1173
|
||||
#, c-format
|
||||
@@ -1465,7 +1479,8 @@ msgstr "kann DHCP/BOOTP-Opition %d nicht setzen: kein Platz mehr im Paket"
|
||||
msgid "PXE menu too large"
|
||||
msgstr "PXE-Menüeintrag zu groß"
|
||||
|
||||
#: rfc2131.c:2117 rfc3315.c:1294
|
||||
#: rfc2131.c:2117
|
||||
#: rfc3315.c:1294
|
||||
#, c-format
|
||||
msgid "%u requested options: %s"
|
||||
msgstr "%u angeforderte Optionen: %s"
|
||||
@@ -1509,7 +1524,7 @@ msgstr "DHCP-Anfrage für nicht unterstützen Hardwaretyp (%d) auf %s empfangen"
|
||||
|
||||
#: helper.c:140
|
||||
msgid "lease() function missing in Lua script"
|
||||
msgstr ""
|
||||
msgstr "Die Funktion lease() fehlt im Lua-Script"
|
||||
|
||||
#: tftp.c:285
|
||||
msgid "unable to get free port for TFTP"
|
||||
@@ -1557,37 +1572,37 @@ msgstr "Start fehlgeschlagen"
|
||||
#: conntrack.c:65
|
||||
#, c-format
|
||||
msgid "Conntrack connection mark retrieval failed: %s"
|
||||
msgstr ""
|
||||
msgstr "\"Conntrack connection mark\"-Abruf fehlgeschlagen: %s"
|
||||
|
||||
#: dhcp6.c:46
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot create DHCPv6 socket: %s"
|
||||
msgstr "kann DHCP-Socket nicht erzeugen: %s"
|
||||
msgstr "Kann DHCPv6-Socket nicht erzeugen: %s"
|
||||
|
||||
#: dhcp6.c:57
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "failed to bind DHCPv6 server socket: %s"
|
||||
msgstr "kann nicht an DHCP-Server-Socket binden: %s"
|
||||
msgstr "Kann nicht an DHCPv6-Server-Socket binden: %s"
|
||||
|
||||
#: rfc3315.c:94
|
||||
#, c-format
|
||||
msgid "no address range available for DHCPv6 request from relay at %s"
|
||||
msgstr ""
|
||||
msgstr "Kein Adressbereich verfügbar für die DHCPv6-Anfrage vom Relay bei %s"
|
||||
|
||||
#: rfc3315.c:103
|
||||
#, c-format
|
||||
msgid "no address range available for DHCPv6 request via %s"
|
||||
msgstr ""
|
||||
msgstr "Kein Adressbereich verfügbar für die DHCPv6-Anfrage via %s"
|
||||
|
||||
#: rfc3315.c:206
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "%u available DHCPv6 subnet: %s/%d"
|
||||
msgstr "%u verfügbare(s) DHCP-Subnetz: %s/%s"
|
||||
msgstr "%u verfügbare(s) DHCPv6-Subnetz: %s/%d"
|
||||
|
||||
#: dhcp-common.c:138
|
||||
#, c-format
|
||||
msgid "Ignoring duplicate dhcp-option %d"
|
||||
msgstr ""
|
||||
msgstr "Ignoriere doppelt vorhandene DHCP-Option %d"
|
||||
|
||||
#: dhcp-common.c:208
|
||||
#, c-format
|
||||
@@ -1615,14 +1630,14 @@ msgid "duplicate IP address %s (%s) in dhcp-config directive"
|
||||
msgstr "doppelte IP-Adresse %s (%s) in \"dhcp-config\"-Anweisung"
|
||||
|
||||
#: dhcp-common.c:443
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "failed to join DHCPv6 multicast group: %s"
|
||||
msgstr "kann nicht an DHCP-Server-Socket binden: %s"
|
||||
msgstr "Konnte DHCPv6-Multicast-Gruppe nicht beitreten: %s"
|
||||
|
||||
#: radv.c:76
|
||||
#, fuzzy, c-format
|
||||
#, c-format
|
||||
msgid "cannot create ICMPv6 socket: %s"
|
||||
msgstr "kann DHCP-Socket nicht erzeugen: %s"
|
||||
msgstr "Kann ICMPv6-Socket nicht erzeugen: %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Specify path to Lua script (no default)."
|
||||
|
||||
+85
-13
@@ -25,6 +25,9 @@ static int cache_inserted = 0, cache_live_freed = 0, insert_error;
|
||||
static union bigname *big_free = NULL;
|
||||
static int bignames_left, hash_size;
|
||||
static int uid = 0;
|
||||
#ifdef HAVE_DNSSEC
|
||||
static struct keydata *keyblock_free = NULL;
|
||||
#endif
|
||||
|
||||
/* type->string mapping: this is also used by the name-hash function as a mixing table. */
|
||||
static const struct {
|
||||
@@ -190,6 +193,10 @@ static void cache_free(struct crec *crecp)
|
||||
big_free = crecp->name.bname;
|
||||
crecp->flags &= ~F_BIGNAME;
|
||||
}
|
||||
#ifdef HAVE_DNSSEC
|
||||
else if (crecp->flags & (F_DNSKEY | F_DS))
|
||||
keydata_free(crecp->addr.key.keydata);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* insert a new cache entry at the head of the list (youngest entry) */
|
||||
@@ -233,7 +240,11 @@ static int is_outdated_cname_pointer(struct crec *crecp)
|
||||
if (!(crecp->flags & F_CNAME))
|
||||
return 0;
|
||||
|
||||
if (crecp->addr.cname.cache && crecp->addr.cname.uid == crecp->addr.cname.cache->uid)
|
||||
/* NB. record may be reused as DS or DNSKEY, where uid is
|
||||
overloaded for something completely different */
|
||||
if (crecp->addr.cname.cache &&
|
||||
(crecp->addr.cname.cache->flags & (F_IPV4 | F_IPV6)) &&
|
||||
crecp->addr.cname.uid == crecp->addr.cname.cache->uid)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
@@ -280,7 +291,7 @@ static int cache_scan_free(char *name, struct all_addr *addr, time_t now, unsign
|
||||
}
|
||||
}
|
||||
else if ((crecp->flags & F_FORWARD) &&
|
||||
((flags & crecp->flags & (F_IPV4 | F_IPV6)) || ((crecp->flags | flags) & F_CNAME)) &&
|
||||
((flags & crecp->flags & F_TYPE) || ((crecp->flags | flags) & F_CNAME)) &&
|
||||
hostname_isequal(cache_get_name(crecp), name))
|
||||
{
|
||||
if (crecp->flags & (F_HOSTS | F_DHCP))
|
||||
@@ -360,7 +371,9 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
|
||||
int freed_all = flags & F_REVERSE;
|
||||
int free_avail = 0;
|
||||
|
||||
log_query(flags | F_UPSTREAM, name, addr, NULL);
|
||||
/* Don't log keys */
|
||||
if (flags & (F_IPV4 | F_IPV6))
|
||||
log_query(flags | F_UPSTREAM, name, addr, NULL);
|
||||
|
||||
/* if previous insertion failed give up now. */
|
||||
if (insert_error)
|
||||
@@ -452,9 +465,7 @@ struct crec *cache_insert(char *name, struct all_addr *addr,
|
||||
|
||||
if (addr)
|
||||
new->addr.addr = *addr;
|
||||
else
|
||||
new->addr.cname.cache = NULL;
|
||||
|
||||
|
||||
new->ttd = now + (time_t)ttl;
|
||||
new->next = new_chain;
|
||||
new_chain = new;
|
||||
@@ -1150,22 +1161,35 @@ void dump_cache(time_t now)
|
||||
if (!is_outdated_cname_pointer(cache))
|
||||
a = cache_get_name(cache->addr.cname.cache);
|
||||
}
|
||||
#ifdef HAVE_IPV6
|
||||
#ifdef HAVE_DNSSEC
|
||||
else if (cache->flags & F_DNSKEY)
|
||||
{
|
||||
a = daemon->addrbuff;
|
||||
sprintf(a, "%3u %u", cache->addr.key.algo, cache->uid);
|
||||
}
|
||||
else if (cache->flags & F_DS)
|
||||
{
|
||||
a = daemon->addrbuff;
|
||||
sprintf(a, "%5u %3u %3u %u", cache->addr.key.flags_or_keyid,
|
||||
cache->addr.key.algo, cache->addr.key.digest, cache->uid);
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
a = daemon->addrbuff;
|
||||
if (cache->flags & F_IPV4)
|
||||
inet_ntop(AF_INET, &cache->addr.addr, a, ADDRSTRLEN);
|
||||
#ifdef HAVE_IPV6
|
||||
else if (cache->flags & F_IPV6)
|
||||
inet_ntop(AF_INET6, &cache->addr.addr, a, ADDRSTRLEN);
|
||||
}
|
||||
#else
|
||||
else
|
||||
a = inet_ntoa(cache->addr.addr.addr.addr4);
|
||||
#endif
|
||||
p += sprintf(p, "%-30.30s %s%s%s%s%s%s%s%s%s%s ", a,
|
||||
}
|
||||
|
||||
p += sprintf(p, "%-30.30s %s%s%s%s%s%s%s%s%s%s%s%s%s ", a,
|
||||
cache->flags & F_IPV4 ? "4" : "",
|
||||
cache->flags & F_IPV6 ? "6" : "",
|
||||
cache->flags & F_DNSKEY ? "K" : "",
|
||||
cache->flags & F_DS ? "S" : "",
|
||||
cache->flags & F_CNAME ? "C" : "",
|
||||
cache->flags & F_FORWARD ? "F" : " ",
|
||||
cache->flags & F_REVERSE ? "R" : " ",
|
||||
@@ -1173,7 +1197,8 @@ void dump_cache(time_t now)
|
||||
cache->flags & F_DHCP ? "D" : " ",
|
||||
cache->flags & F_NEG ? "N" : " ",
|
||||
cache->flags & F_NXDOMAIN ? "X" : " ",
|
||||
cache->flags & F_HOSTS ? "H" : " ");
|
||||
cache->flags & F_HOSTS ? "H" : " ",
|
||||
cache->flags & F_DNSSECOK ? "V" : " ");
|
||||
#ifdef HAVE_BROKEN_RTC
|
||||
p += sprintf(p, "%lu", cache->flags & F_IMMORTAL ? 0: (unsigned long)(cache->ttd - now));
|
||||
#else
|
||||
@@ -1287,3 +1312,50 @@ void log_query(unsigned int flags, char *name, struct all_addr *addr, char *arg)
|
||||
my_syslog(LOG_INFO, "%s %s %s %s", source, name, verb, dest);
|
||||
}
|
||||
|
||||
#ifdef HAVE_DNSSEC
|
||||
struct keydata *keydata_alloc(char *data, size_t len)
|
||||
{
|
||||
struct keydata *block, *ret = NULL;
|
||||
struct keydata **prev = &ret;
|
||||
while (len > 0)
|
||||
{
|
||||
if (keyblock_free)
|
||||
{
|
||||
block = keyblock_free;
|
||||
keyblock_free = block->next;
|
||||
}
|
||||
else
|
||||
block = whine_malloc(sizeof(struct keydata));
|
||||
|
||||
if (!block)
|
||||
{
|
||||
/* failed to alloc, free partial chain */
|
||||
keydata_free(ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
memcpy(block->key, data, len > KEYBLOCK_LEN ? KEYBLOCK_LEN : len);
|
||||
data += KEYBLOCK_LEN;
|
||||
len -= KEYBLOCK_LEN;
|
||||
*prev = block;
|
||||
prev = &block->next;
|
||||
block->next = NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void keydata_free(struct keydata *blocks)
|
||||
{
|
||||
struct keydata *tmp;
|
||||
|
||||
if (blocks)
|
||||
{
|
||||
for (tmp = blocks; tmp->next; tmp = tmp->next);
|
||||
tmp->next = keyblock_free;
|
||||
keyblock_free = blocks;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#define MAX_PROCS 20 /* max no children for TCP requests */
|
||||
#define CHILD_LIFETIME 150 /* secs 'till terminated (RFC1035 suggests > 120s) */
|
||||
#define EDNS_PKTSZ 4096 /* default max EDNS.0 UDP packet from RFC5625 */
|
||||
#define KEYBLOCK_LEN 140 /* choose to mininise fragmentation when storing DNSSEC keys */
|
||||
#define TIMEOUT 10 /* drop UDP queries after TIMEOUT seconds */
|
||||
#define FORWARD_TEST 50 /* try all servers every 50 queries */
|
||||
#define FORWARD_TIME 20 /* or 20 seconds */
|
||||
|
||||
+3
-7
@@ -1209,13 +1209,9 @@ void clear_cache_and_reload(time_t now)
|
||||
}
|
||||
#ifdef HAVE_DHCP6
|
||||
else if (daemon->ra_contexts)
|
||||
{
|
||||
/* Not doing DHCP, so no lease system, manage
|
||||
alarms for ra only */
|
||||
time_t next_event = periodic_ra(now);
|
||||
if (next_event != 0)
|
||||
alarm((unsigned)difftime(next_event, now));
|
||||
}
|
||||
/* Not doing DHCP, so no lease system, manage
|
||||
alarms for ra only */
|
||||
send_alarm(periodic_ra(now), now);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
+31
-6
@@ -217,7 +217,8 @@ struct event_desc {
|
||||
#define OPT_CONNTRACK 35
|
||||
#define OPT_FQDN_UPDATE 36
|
||||
#define OPT_RA 37
|
||||
#define OPT_LAST 38
|
||||
#define OPT_TFTP_LC 38
|
||||
#define OPT_LAST 39
|
||||
|
||||
/* extra flags for my_syslog, we use a couple of facilities since they are known
|
||||
not to occupy the same bits as priorities, no matter how syslog.h is set up. */
|
||||
@@ -297,17 +298,30 @@ union bigname {
|
||||
union bigname *next; /* freelist */
|
||||
};
|
||||
|
||||
struct keydata {
|
||||
struct keydata *next;
|
||||
unsigned char key[KEYBLOCK_LEN];
|
||||
};
|
||||
|
||||
struct crec {
|
||||
struct crec *next, *prev, *hash_next;
|
||||
time_t ttd; /* time to die */
|
||||
int uid;
|
||||
/* union is 16 bytes when doing IPv6, 8 bytes on 32 bit machines without IPv6 */
|
||||
union {
|
||||
struct all_addr addr;
|
||||
struct {
|
||||
struct crec *cache;
|
||||
int uid;
|
||||
} cname;
|
||||
struct {
|
||||
struct keydata *keydata;
|
||||
unsigned char algo;
|
||||
unsigned char digest; /* DS only */
|
||||
unsigned short flags_or_keyid; /* flags for DNSKEY, keyid for DS */
|
||||
} key;
|
||||
} addr;
|
||||
time_t ttd; /* time to die */
|
||||
/* used as keylen if F_DS or F_DNSKEY, index to source for F_HOSTS */
|
||||
int uid;
|
||||
unsigned short flags;
|
||||
union {
|
||||
char sname[SMALLDNAME];
|
||||
@@ -328,14 +342,21 @@ struct crec {
|
||||
#define F_BIGNAME (1u<<9)
|
||||
#define F_NXDOMAIN (1u<<10)
|
||||
#define F_CNAME (1u<<11)
|
||||
#define F_NOERR (1u<<12)
|
||||
#define F_DNSKEY (1u<<12)
|
||||
#define F_CONFIG (1u<<13)
|
||||
#define F_DS (1u<<14)
|
||||
#define F_DNSSECOK (1u<<15)
|
||||
|
||||
/* below here are only valid as args to log_query: cache
|
||||
entries are limited to 16 bits */
|
||||
#define F_UPSTREAM (1u<<16)
|
||||
#define F_RRNAME (1u<<17)
|
||||
#define F_SERVER (1u<<18)
|
||||
#define F_QUERY (1u<<19)
|
||||
#define F_NOERR (1u<<20)
|
||||
/* composites */
|
||||
#define F_TYPE (F_IPV4 | F_IPV6 | F_DNSKEY | F_DS) /* Only one may be set */
|
||||
|
||||
|
||||
|
||||
/* struct sockaddr is not large enough to hold any address,
|
||||
@@ -838,6 +859,10 @@ char *get_domain(struct in_addr addr);
|
||||
#ifdef HAVE_IPV6
|
||||
char *get_domain6(struct in6_addr *addr);
|
||||
#endif
|
||||
#ifdef HAVE_DNSSEC
|
||||
struct keydata *keydata_alloc(char *data, size_t len);
|
||||
void keydata_free(struct keydata *blocks);
|
||||
#endif
|
||||
|
||||
/* rfc1035.c */
|
||||
unsigned int extract_request(struct dns_header *header, size_t qlen,
|
||||
@@ -975,7 +1000,7 @@ u64 lease_find_max_addr6(struct dhcp_context *context);
|
||||
void lease_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface);
|
||||
#endif
|
||||
void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
|
||||
unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now);
|
||||
unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now, int force);
|
||||
void lease_set_hostname(struct dhcp_lease *lease, char *name, int auth, char *domain, char *config_domain);
|
||||
void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now);
|
||||
void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now);
|
||||
@@ -1141,7 +1166,7 @@ void ra_start_unsolicted(time_t now, struct dhcp_context *context);
|
||||
/* slaac.c */
|
||||
#ifdef HAVE_DHCP6
|
||||
void build_subnet_map(void);
|
||||
void slaac_add_addrs(struct dhcp_lease *lease, time_t now);
|
||||
void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force);
|
||||
time_t periodic_slaac(time_t now, struct dhcp_lease *leases);
|
||||
void slaac_ping_reply(struct in6_addr *sender, unsigned char *packet, char *interface, struct dhcp_lease *leases);
|
||||
void schedule_subnet_map(void);
|
||||
|
||||
+20
-10
@@ -98,7 +98,7 @@ void lease_init(time_t now)
|
||||
hw_type = ARPHRD_ETHER;
|
||||
|
||||
lease_set_hwaddr(lease, (unsigned char *)daemon->dhcp_buff2, (unsigned char *)daemon->packet,
|
||||
hw_len, hw_type, clid_len, now);
|
||||
hw_len, hw_type, clid_len, now, 0);
|
||||
|
||||
if (strcmp(daemon->dhcp_buff, "*") != 0)
|
||||
lease_set_hostname(lease, daemon->dhcp_buff, 0, get_domain(lease->addr), NULL);
|
||||
@@ -119,7 +119,7 @@ void lease_init(time_t now)
|
||||
|
||||
if ((lease = lease6_allocate(&addr.addr.addr6, lease_type)))
|
||||
{
|
||||
lease_set_hwaddr(lease, NULL, (unsigned char *)daemon->packet, 0, hw_type, clid_len, now);
|
||||
lease_set_hwaddr(lease, NULL, (unsigned char *)daemon->packet, 0, hw_type, clid_len, now, 0);
|
||||
|
||||
if (strcmp(daemon->dhcp_buff, "*") != 0)
|
||||
lease_set_hostname(lease, daemon->dhcp_buff, 0, get_domain6((struct in6_addr *)lease->hwaddr), NULL);
|
||||
@@ -310,12 +310,19 @@ void lease_update_file(time_t now)
|
||||
/* do timed RAs and determine when the next is, also pings to potential SLAAC addresses */
|
||||
if (daemon->ra_contexts)
|
||||
{
|
||||
time_t ra_event = periodic_slaac(now, leases);
|
||||
time_t event;
|
||||
|
||||
next_event = periodic_ra(now);
|
||||
if ((event = periodic_slaac(now, leases)) != 0)
|
||||
{
|
||||
if (next_event == 0 || difftime(next_event, event) > 0.0)
|
||||
next_event = event;
|
||||
}
|
||||
|
||||
if (next_event == 0 || difftime(next_event, ra_event) > 0.0)
|
||||
next_event = ra_event;
|
||||
if ((event = periodic_ra(now)) != 0)
|
||||
{
|
||||
if (next_event == 0 || difftime(next_event, event) > 0.0)
|
||||
next_event = event;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -702,13 +709,16 @@ void lease_set_expires(struct dhcp_lease *lease, unsigned int len, time_t now)
|
||||
}
|
||||
|
||||
void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
|
||||
unsigned char *clid, int hw_len, int hw_type, int clid_len, time_t now)
|
||||
unsigned char *clid, int hw_len, int hw_type, int clid_len,
|
||||
time_t now, int force)
|
||||
{
|
||||
#ifdef HAVE_DHCP6
|
||||
int change = 0;
|
||||
int change = force;
|
||||
lease->flags |= LEASE_HAVE_HWADDR;
|
||||
#endif
|
||||
|
||||
(void)force;
|
||||
|
||||
if (hw_len != lease->hwaddr_len ||
|
||||
hw_type != lease->hwaddr_type ||
|
||||
(hw_len != 0 && memcmp(lease->hwaddr, hwaddr, hw_len) != 0))
|
||||
@@ -758,7 +768,7 @@ void lease_set_hwaddr(struct dhcp_lease *lease, unsigned char *hwaddr,
|
||||
|
||||
#ifdef HAVE_DHCP6
|
||||
if (change)
|
||||
slaac_add_addrs(lease, now);
|
||||
slaac_add_addrs(lease, now, force);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -886,7 +896,7 @@ void lease_set_interface(struct dhcp_lease *lease, int interface, time_t now)
|
||||
lease->flags |= LEASE_CHANGED;
|
||||
|
||||
#ifdef HAVE_DHCP6
|
||||
slaac_add_addrs(lease, now);
|
||||
slaac_add_addrs(lease, now, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
+7
-4
@@ -266,10 +266,13 @@ static int iface_allowed(struct irec **irecp, int if_index,
|
||||
iface->dad = dad;
|
||||
iface->done = 0;
|
||||
if ((iface->name = whine_malloc(strlen(ifr.ifr_name)+1)))
|
||||
strcpy(iface->name, ifr.ifr_name);
|
||||
iface->next = *irecp;
|
||||
*irecp = iface;
|
||||
return 1;
|
||||
{
|
||||
strcpy(iface->name, ifr.ifr_name);
|
||||
iface->next = *irecp;
|
||||
*irecp = iface;
|
||||
return 1;
|
||||
}
|
||||
free(iface);
|
||||
}
|
||||
|
||||
errno = ENOMEM;
|
||||
|
||||
@@ -117,6 +117,7 @@ struct myoption {
|
||||
#define LOPT_RA 306
|
||||
#define LOPT_DUID 307
|
||||
#define LOPT_HOST_REC 308
|
||||
#define LOPT_TFTP_LC 309
|
||||
|
||||
#ifdef HAVE_GETOPT_LONG
|
||||
static const struct option opts[] =
|
||||
@@ -196,6 +197,7 @@ static const struct myoption opts[] =
|
||||
{ "tftp-unique-root", 0, 0, LOPT_APREF },
|
||||
{ "tftp-root", 1, 0, LOPT_PREFIX },
|
||||
{ "tftp-max", 1, 0, LOPT_TFTP_MAX },
|
||||
{ "tftp-lowercase", 0, 0, LOPT_TFTP_LC },
|
||||
{ "ptr-record", 1, 0, LOPT_PTR },
|
||||
{ "naptr-record", 1, 0, LOPT_NAPTR },
|
||||
{ "bridge-interface", 1, 0 , LOPT_BRIDGE },
|
||||
@@ -342,6 +344,7 @@ static struct {
|
||||
{ LOPT_SECURE, OPT_TFTP_SECURE, NULL, gettext_noop("Allow access only to files owned by the user running dnsmasq."), NULL },
|
||||
{ LOPT_TFTP_MAX, ARG_ONE, "<integer>", gettext_noop("Maximum number of conncurrent TFTP transfers (defaults to %s)."), "#" },
|
||||
{ LOPT_NOBLOCK, OPT_TFTP_NOBLOCK, NULL, gettext_noop("Disable the TFTP blocksize extension."), NULL },
|
||||
{ LOPT_TFTP_LC, OPT_TFTP_LC, NULL, gettext_noop("Convert TFTP filenames to lowercase"), NULL },
|
||||
{ LOPT_TFTPPORTS, ARG_ONE, "<start>,<end>", gettext_noop("Ephemeral port range for use by TFTP transfers."), NULL },
|
||||
{ LOPT_LOG_OPTS, OPT_LOG_OPTS, NULL, gettext_noop("Extra logging for DHCP."), NULL },
|
||||
{ LOPT_MAX_LOGS, ARG_ONE, "[=<integer>]", gettext_noop("Enable async. logging; optionally set queue length."), NULL },
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#define ALL_HOSTS "FF02::1"
|
||||
#define ALL_NODES "FF02::1"
|
||||
#define ALL_ROUTERS "FF02::2"
|
||||
|
||||
struct ping_packet {
|
||||
|
||||
+3
-2
@@ -179,7 +179,8 @@ void icmp6_packet(void)
|
||||
}
|
||||
|
||||
my_syslog(MS_DHCP | LOG_INFO, "RTR-SOLICIT(%s) %s", interface, mac);
|
||||
send_ra(if_index, interface, &from.sin6_addr);
|
||||
/* source address may not be valid in solicit request. */
|
||||
send_ra(if_index, interface, !IN6_IS_ADDR_UNSPECIFIED(&from.sin6_addr) ? &from.sin6_addr : NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -317,7 +318,7 @@ static void send_ra(int iface, char *iface_name, struct in6_addr *dest)
|
||||
addr.sin6_scope_id = iface;
|
||||
}
|
||||
else
|
||||
inet_pton(AF_INET6, ALL_HOSTS, &addr.sin6_addr);
|
||||
inet_pton(AF_INET6, ALL_NODES, &addr.sin6_addr);
|
||||
|
||||
send_from(daemon->icmp6fd, 0, daemon->outpacket.iov_base, save_counter(0),
|
||||
(union mysockaddr *)&addr, (struct all_addr *)&parm.link_local, iface);
|
||||
|
||||
+15
-9
@@ -699,15 +699,17 @@ static unsigned char *do_doctor(unsigned char *p, int count, struct dns_header *
|
||||
unsigned char *p2 = p1;
|
||||
/* make counted string zero-term and sanitise */
|
||||
for (i = 0; i < len; i++)
|
||||
if (isprint(*(p2+1)))
|
||||
{
|
||||
*p2 = *(p2+1);
|
||||
p2++;
|
||||
}
|
||||
{
|
||||
if (!isprint((int)*(p2+1)))
|
||||
break;
|
||||
|
||||
*p2 = *(p2+1);
|
||||
p2++;
|
||||
}
|
||||
*p2 = 0;
|
||||
my_syslog(LOG_INFO, "reply %s is %s", name, p1);
|
||||
/* restore */
|
||||
memmove(p1 + 1, p1, len);
|
||||
memmove(p1 + 1, p1, i);
|
||||
*p1 = len;
|
||||
p1 += len+1;
|
||||
}
|
||||
@@ -936,10 +938,14 @@ int extract_addresses(struct dns_header *header, size_t qlen, char *name, time_t
|
||||
if (!cname_count--)
|
||||
return 0; /* looped CNAMES */
|
||||
newc = cache_insert(name, NULL, now, attl, F_CNAME | F_FORWARD);
|
||||
if (newc && cpp)
|
||||
if (newc)
|
||||
{
|
||||
cpp->addr.cname.cache = newc;
|
||||
cpp->addr.cname.uid = newc->uid;
|
||||
newc->addr.cname.cache = NULL;
|
||||
if (cpp)
|
||||
{
|
||||
cpp->addr.cname.cache = newc;
|
||||
cpp->addr.cname.uid = newc->uid;
|
||||
}
|
||||
}
|
||||
|
||||
cpp = newc;
|
||||
|
||||
+46
-41
@@ -483,7 +483,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
|
||||
{
|
||||
logaddr = &mess->yiaddr;
|
||||
|
||||
lease_set_hwaddr(lease, mess->chaddr, NULL, mess->hlen, mess->htype, 0, now);
|
||||
lease_set_hwaddr(lease, mess->chaddr, NULL, mess->hlen, mess->htype, 0, now, 1);
|
||||
if (hostname)
|
||||
lease_set_hostname(lease, hostname, 1, get_domain(lease->addr), domain);
|
||||
/* infinite lease unless nailed in dhcp-host line. */
|
||||
@@ -1222,51 +1222,56 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
|
||||
|
||||
log_tags(tagif_netid, ntohl(mess->xid));
|
||||
|
||||
#ifdef HAVE_SCRIPT
|
||||
if (do_classes && daemon->lease_change_command)
|
||||
if (do_classes)
|
||||
{
|
||||
struct dhcp_netid *n;
|
||||
|
||||
if (mess->giaddr.s_addr)
|
||||
lease->giaddr = mess->giaddr;
|
||||
|
||||
/* pick up INIT-REBOOT events. */
|
||||
lease->flags |= LEASE_CHANGED;
|
||||
free(lease->extradata);
|
||||
lease->extradata = NULL;
|
||||
lease->extradata_size = lease->extradata_len = 0;
|
||||
|
||||
add_extradata_opt(lease, option_find(mess, sz, OPTION_VENDOR_ID, 1));
|
||||
add_extradata_opt(lease, option_find(mess, sz, OPTION_HOSTNAME, 1));
|
||||
add_extradata_opt(lease, oui);
|
||||
add_extradata_opt(lease, serial);
|
||||
add_extradata_opt(lease, class);
|
||||
|
||||
/* space-concat tag set */
|
||||
if (!tagif_netid)
|
||||
add_extradata_opt(lease, NULL);
|
||||
else
|
||||
for (n = tagif_netid; n; n = n->next)
|
||||
{
|
||||
struct dhcp_netid *n1;
|
||||
/* kill dupes */
|
||||
for (n1 = n->next; n1; n1 = n1->next)
|
||||
if (strcmp(n->net, n1->net) == 0)
|
||||
break;
|
||||
if (!n1)
|
||||
lease_add_extradata(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0);
|
||||
}
|
||||
|
||||
if ((opt = option_find(mess, sz, OPTION_USER_CLASS, 1)))
|
||||
#ifdef HAVE_SCRIPT
|
||||
if (daemon->lease_change_command)
|
||||
{
|
||||
int len = option_len(opt);
|
||||
unsigned char *ucp = option_ptr(opt, 0);
|
||||
/* If the user-class option started as counted strings, the first byte will be zero. */
|
||||
if (len != 0 && ucp[0] == 0)
|
||||
ucp++, len--;
|
||||
lease_add_extradata(lease, ucp, len, 0);
|
||||
struct dhcp_netid *n;
|
||||
|
||||
if (mess->giaddr.s_addr)
|
||||
lease->giaddr = mess->giaddr;
|
||||
|
||||
free(lease->extradata);
|
||||
lease->extradata = NULL;
|
||||
lease->extradata_size = lease->extradata_len = 0;
|
||||
|
||||
add_extradata_opt(lease, option_find(mess, sz, OPTION_VENDOR_ID, 1));
|
||||
add_extradata_opt(lease, option_find(mess, sz, OPTION_HOSTNAME, 1));
|
||||
add_extradata_opt(lease, oui);
|
||||
add_extradata_opt(lease, serial);
|
||||
add_extradata_opt(lease, class);
|
||||
|
||||
/* space-concat tag set */
|
||||
if (!tagif_netid)
|
||||
add_extradata_opt(lease, NULL);
|
||||
else
|
||||
for (n = tagif_netid; n; n = n->next)
|
||||
{
|
||||
struct dhcp_netid *n1;
|
||||
/* kill dupes */
|
||||
for (n1 = n->next; n1; n1 = n1->next)
|
||||
if (strcmp(n->net, n1->net) == 0)
|
||||
break;
|
||||
if (!n1)
|
||||
lease_add_extradata(lease, (unsigned char *)n->net, strlen(n->net), n->next ? ' ' : 0);
|
||||
}
|
||||
|
||||
if ((opt = option_find(mess, sz, OPTION_USER_CLASS, 1)))
|
||||
{
|
||||
int len = option_len(opt);
|
||||
unsigned char *ucp = option_ptr(opt, 0);
|
||||
/* If the user-class option started as counted strings, the first byte will be zero. */
|
||||
if (len != 0 && ucp[0] == 0)
|
||||
ucp++, len--;
|
||||
lease_add_extradata(lease, ucp, len, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if (!hostname_auth && (client_hostname = host_from_dns(mess->yiaddr)))
|
||||
{
|
||||
@@ -1276,7 +1281,7 @@ size_t dhcp_reply(struct dhcp_context *context, char *iface_name, int int_index,
|
||||
}
|
||||
|
||||
time = calc_time(context, config, option_find(mess, sz, OPTION_LEASE_TIME, 4));
|
||||
lease_set_hwaddr(lease, mess->chaddr, clid, mess->hlen, mess->htype, clid_len, now);
|
||||
lease_set_hwaddr(lease, mess->chaddr, clid, mess->hlen, mess->htype, clid_len, now, do_classes);
|
||||
|
||||
/* if all the netids in the ignore_name list are present, ignore client-supplied name */
|
||||
if (!hostname_auth)
|
||||
|
||||
+1
-1
@@ -637,7 +637,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh
|
||||
if (lease)
|
||||
{
|
||||
lease_set_expires(lease, lease_time, now);
|
||||
lease_set_hwaddr(lease, NULL, clid, 0, iaid, clid_len, now);
|
||||
lease_set_hwaddr(lease, NULL, clid, 0, iaid, clid_len, now, 0);
|
||||
lease_set_interface(lease, interface, now);
|
||||
if (hostname && ia_type == OPTION6_IA_NA)
|
||||
{
|
||||
|
||||
+13
-1
@@ -23,12 +23,14 @@
|
||||
static int map_rebuild = 0;
|
||||
static int ping_id = 0;
|
||||
|
||||
void slaac_add_addrs(struct dhcp_lease *lease, time_t now)
|
||||
void slaac_add_addrs(struct dhcp_lease *lease, time_t now, int force)
|
||||
{
|
||||
struct slaac_address *slaac, *old, **up;
|
||||
struct dhcp_context *context;
|
||||
int dns_dirty = 0;
|
||||
|
||||
if (!(lease->flags & LEASE_HAVE_HWADDR) ||
|
||||
(lease->flags & (LEASE_TA | LEASE_NA)) ||
|
||||
lease->last_interface == 0 ||
|
||||
!lease->hostname)
|
||||
return ;
|
||||
@@ -72,6 +74,13 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now)
|
||||
if (IN6_ARE_ADDR_EQUAL(&addr, &slaac->addr))
|
||||
{
|
||||
*up = slaac->next;
|
||||
/* recheck when DHCPv4 goes through init-reboot */
|
||||
if (force)
|
||||
{
|
||||
slaac->ping_time = now;
|
||||
slaac->backoff = 1;
|
||||
dns_dirty = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
up = &slaac->next;
|
||||
@@ -95,6 +104,9 @@ void slaac_add_addrs(struct dhcp_lease *lease, time_t now)
|
||||
}
|
||||
}
|
||||
|
||||
if (old || dns_dirty)
|
||||
lease_update_dns(1);
|
||||
|
||||
/* Free any no reused */
|
||||
for (; old; old = slaac)
|
||||
{
|
||||
|
||||
+50
-34
@@ -24,6 +24,7 @@ static ssize_t tftp_err(int err, char *packet, char *mess, char *file);
|
||||
static ssize_t tftp_err_oops(char *packet, char *file);
|
||||
static ssize_t get_block(char *packet, struct tftp_transfer *transfer);
|
||||
static char *next(char **p, char *end);
|
||||
static void sanitise(char *buf);
|
||||
|
||||
#define OP_RRQ 1
|
||||
#define OP_WRQ 2
|
||||
@@ -311,7 +312,10 @@ void tftp_request(struct listener *listen, time_t now)
|
||||
!(filename = next(&p, end)) ||
|
||||
!(mode = next(&p, end)) ||
|
||||
(strcasecmp(mode, "octet") != 0 && strcasecmp(mode, "netascii") != 0))
|
||||
len = tftp_err(ERR_ILL, packet, _("unsupported request from %s"), daemon->addrbuff);
|
||||
{
|
||||
len = tftp_err(ERR_ILL, packet, _("unsupported request from %s"), daemon->addrbuff);
|
||||
is_err = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strcasecmp(mode, "netascii") == 0)
|
||||
@@ -344,9 +348,12 @@ void tftp_request(struct listener *listen, time_t now)
|
||||
}
|
||||
|
||||
/* cope with backslashes from windows boxen. */
|
||||
while ((p = strchr(filename, '\\')))
|
||||
*p = '/';
|
||||
|
||||
for (p = filename; *p; p++)
|
||||
if (*p == '\\')
|
||||
*p = '/';
|
||||
else if (option_bool(OPT_TFTP_LC))
|
||||
*p = tolower(*p);
|
||||
|
||||
strcpy(daemon->namebuff, "/");
|
||||
if (prefix)
|
||||
{
|
||||
@@ -393,7 +400,7 @@ void tftp_request(struct listener *listen, time_t now)
|
||||
}
|
||||
|
||||
while (sendto(transfer->sockfd, packet, len, 0,
|
||||
(struct sockaddr *)&peer, sizeof(peer)) == -1 && errno == EINTR);
|
||||
(struct sockaddr *)&peer, sa_len(&peer)) == -1 && errno == EINTR);
|
||||
|
||||
if (is_err)
|
||||
free_transfer(transfer);
|
||||
@@ -501,12 +508,12 @@ void check_tftp_listeners(fd_set *rset, time_t now)
|
||||
{
|
||||
tmp = transfer->next;
|
||||
|
||||
prettyprint_addr(&transfer->peer, daemon->addrbuff);
|
||||
|
||||
if (FD_ISSET(transfer->sockfd, rset))
|
||||
{
|
||||
/* we overwrote the buffer... */
|
||||
daemon->srv_save = NULL;
|
||||
|
||||
prettyprint_addr(&transfer->peer, daemon->addrbuff);
|
||||
|
||||
if ((len = recv(transfer->sockfd, daemon->packet, daemon->packet_buff_sz, 0)) >= (ssize_t)sizeof(struct ack))
|
||||
{
|
||||
@@ -528,14 +535,8 @@ void check_tftp_listeners(fd_set *rset, time_t now)
|
||||
if (!err)
|
||||
err = "";
|
||||
else
|
||||
{
|
||||
unsigned char *q, *r;
|
||||
for (q = r = (unsigned char *)err; *r; r++)
|
||||
if (isprint(*r))
|
||||
*(q++) = *r;
|
||||
*q = 0;
|
||||
}
|
||||
|
||||
sanitise(err);
|
||||
|
||||
my_syslog(MS_TFTP | LOG_ERR, _("error %d %s received from %s"),
|
||||
(int)ntohs(mess->block), err,
|
||||
daemon->addrbuff);
|
||||
@@ -562,32 +563,33 @@ void check_tftp_listeners(fd_set *rset, time_t now)
|
||||
len = tftp_err_oops(daemon->packet, transfer->file->filename);
|
||||
endcon = 1;
|
||||
}
|
||||
else if (++transfer->backoff > 5)
|
||||
/* don't complain about timeout when we're awaiting the last
|
||||
ACK, some clients never send it */
|
||||
else if (++transfer->backoff > 5 && len != 0)
|
||||
{
|
||||
/* don't complain about timeout when we're awaiting the last
|
||||
ACK, some clients never send it */
|
||||
if (len != 0)
|
||||
{
|
||||
my_syslog(MS_TFTP | LOG_ERR, _("failed sending %s to %s"),
|
||||
transfer->file->filename, daemon->addrbuff);
|
||||
len = 0;
|
||||
endcon = 1;
|
||||
}
|
||||
endcon = 1;
|
||||
len = 0;
|
||||
}
|
||||
|
||||
|
||||
if (len != 0)
|
||||
while(sendto(transfer->sockfd, daemon->packet, len, 0,
|
||||
(struct sockaddr *)&transfer->peer, sizeof(transfer->peer)) == -1 && errno == EINTR);
|
||||
(struct sockaddr *)&transfer->peer, sa_len(&transfer->peer)) == -1 && errno == EINTR);
|
||||
|
||||
if (endcon || len == 0)
|
||||
{
|
||||
if (!endcon)
|
||||
my_syslog(MS_TFTP | LOG_INFO, _("sent %s to %s"), transfer->file->filename, daemon->addrbuff);
|
||||
strcpy(daemon->namebuff, transfer->file->filename);
|
||||
sanitise(daemon->namebuff);
|
||||
my_syslog(MS_TFTP | LOG_INFO, endcon ? _("failed sending %s to %s") : _("sent %s to %s"), daemon->namebuff, daemon->addrbuff);
|
||||
/* unlink */
|
||||
*up = tmp;
|
||||
/* put on queue to be sent to script and deleted */
|
||||
transfer->next = daemon->tftp_done_trans;
|
||||
daemon->tftp_done_trans = transfer;
|
||||
if (endcon)
|
||||
free_transfer(transfer);
|
||||
else
|
||||
{
|
||||
/* put on queue to be sent to script and deleted */
|
||||
transfer->next = daemon->tftp_done_trans;
|
||||
daemon->tftp_done_trans = transfer;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -621,6 +623,16 @@ static char *next(char **p, char *end)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void sanitise(char *buf)
|
||||
{
|
||||
unsigned char *q, *r;
|
||||
for (q = r = (unsigned char *)buf; *r; r++)
|
||||
if (isprint((int)*r))
|
||||
*(q++) = *r;
|
||||
*q = 0;
|
||||
|
||||
}
|
||||
|
||||
static ssize_t tftp_err(int err, char *packet, char *message, char *file)
|
||||
{
|
||||
struct errmess {
|
||||
@@ -629,7 +641,9 @@ static ssize_t tftp_err(int err, char *packet, char *message, char *file)
|
||||
} *mess = (struct errmess *)packet;
|
||||
ssize_t ret = 4;
|
||||
char *errstr = strerror(errno);
|
||||
|
||||
|
||||
sanitise(file);
|
||||
|
||||
mess->op = htons(OP_ERR);
|
||||
mess->err = htons(err);
|
||||
ret += (snprintf(mess->message, 500, message, file, errstr) + 1);
|
||||
@@ -640,7 +654,9 @@ static ssize_t tftp_err(int err, char *packet, char *message, char *file)
|
||||
|
||||
static ssize_t tftp_err_oops(char *packet, char *file)
|
||||
{
|
||||
return tftp_err(ERR_NOTDEF, packet, _("cannot read %s: %s"), file);
|
||||
/* May have >1 refs to file, so potentially mangle a copy of the name */
|
||||
strcpy(daemon->namebuff, file);
|
||||
return tftp_err(ERR_NOTDEF, packet, _("cannot read %s: %s"), daemon->namebuff);
|
||||
}
|
||||
|
||||
/* return -1 for error, zero for done. */
|
||||
|
||||
+1
-1
@@ -330,7 +330,7 @@ int is_same_net6(struct in6_addr *a, struct in6_addr *b, int prefixlen)
|
||||
return 0;
|
||||
|
||||
if (pfbits == 0 ||
|
||||
(a->s6_addr[pfbytes] >> (8 - pfbits) != b->s6_addr[pfbytes] >> (8 - pfbits)))
|
||||
(a->s6_addr[pfbytes] >> (8 - pfbits) == b->s6_addr[pfbytes] >> (8 - pfbits)))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in new issue
Block a user