Fix: 'host-name'-Option kollidierte mit dem nativen Reservierungs-Hostname
Der Nutzer fragte zu Recht nach, ob eine Reservierung mit gleichzeitig gesetztem hostname-Feld (aus dem Namen abgeleitet, z.B. 'unraid') UND einem option-data-Override fuer 'host-name' (Code 12, z.B. 'test') so beabsichtigt ist. Laut Kea-Dokumentation beantwortet Kea die Host-Name- Anfrage eines Clients bei einer Reservierung automatisch mit deren eigenem hostname-Feld -- der zusaetzliche Options-Override fuer dieselbe Option war eine unbeabsichtigte Dopplung/Quelle fuer Widersprueche, keine zusaetzliche Funktion. 'host-name' aus den 56 verbleibenden Standard-Optionen entfernt (war eine von 57), neue Migration v3 loescht eine bereits geseedete/gesetzte host-name-Zeile samt Wert aus bestehenden Installationen nach. Live auf der Test-VM verifiziert: Option ist verschwunden, die 'unraid'-Reservierung enthaelt jetzt nur noch hw-address/ip-address/hostname ohne option-data, kea-dhcp4 -t weiterhin erfolgreich.
This commit is contained in:
+28
-8
@@ -516,9 +516,15 @@ def get_db_connection():
|
||||
# Optionen (message-type, parameter-request-list, requested-address,
|
||||
# client-identifier, server-identifier, ...) ebenfalls bewusst nicht
|
||||
# enthalten — die sind serverseitig nicht sinnvoll setzbar (auch Windows
|
||||
# Server listet sie nicht unter "Predefined Options"). Alle 57 Namen live
|
||||
# gegen eine echte Kea-2.4.1-Instanz verifiziert (kea-dhcp4 -t je Option
|
||||
# einzeln) — u.a. "host-name" (Kea-Name mit Bindestrich, NICHT "hostname").
|
||||
# Server listet sie nicht unter "Predefined Options"). "host-name" (12)
|
||||
# ebenfalls bewusst NICHT enthalten: Kea beantwortet die Host-Name-Anfrage
|
||||
# eines Clients bei einer Reservierung bereits automatisch mit deren
|
||||
# eigenem "hostname"-Feld (aus dem Namen der Reservierung abgeleitet, siehe
|
||||
# _dhcp_safe_hostname) — ein zusätzlicher option-data-Override für dieselbe
|
||||
# Option in derselben Reservierung wäre eine mit der Kea-Doku belegte
|
||||
# Dopplung/Quelle für Widersprüche, kein zusätzlicher Nutzen. Alle
|
||||
# restlichen Namen live gegen eine echte Kea-2.4.1-Instanz verifiziert
|
||||
# (kea-dhcp4 -t je Option einzeln).
|
||||
DHCP_STANDARD_OPTIONS = [
|
||||
(4, "time-servers", "ipv4-address", "Zeitserver (RFC 868)"),
|
||||
(7, "log-servers", "ipv4-address", "Log-Server (MIT-LCS UDP)"),
|
||||
@@ -526,7 +532,6 @@ DHCP_STANDARD_OPTIONS = [
|
||||
(9, "lpr-servers", "ipv4-address", "LPR-Druckserver"),
|
||||
(10, "impress-servers", "ipv4-address", "Impress-Server"),
|
||||
(11, "resource-location-servers", "ipv4-address", "Resource Location Server"),
|
||||
(12, "host-name", "string", "Hostname (für Reservierung erzwingbar)"),
|
||||
(13, "boot-size", "uint16", "Boot-Image-Größe (Blöcke)"),
|
||||
(14, "merit-dump", "string", "Crash-Dump-Datei"),
|
||||
(16, "swap-server", "ipv4-address", "Swap-Server"),
|
||||
@@ -718,10 +723,10 @@ def _ensure_schema():
|
||||
(code, name, opt_type, description),
|
||||
)
|
||||
conn.execute("INSERT OR IGNORE INTO settings (key, value) VALUES (?, '1')", (_migration_key_std_opts,))
|
||||
# v2: Liste um weitere verifizierte Standard-Optionen erweitert (u.a.
|
||||
# host-name/12) — eigener Guard, damit bereits auf v1 migrierte
|
||||
# Installationen die neu hinzugekommenen Optionen ebenfalls bekommen,
|
||||
# ohne die gesamte Seed-Logik erneut über alle Zeilen laufen zu lassen.
|
||||
# v2: Liste um weitere verifizierte Standard-Optionen erweitert — eigener
|
||||
# Guard, damit bereits auf v1 migrierte Installationen die neu
|
||||
# hinzugekommenen Optionen ebenfalls bekommen, ohne die gesamte
|
||||
# Seed-Logik erneut über alle Zeilen laufen zu lassen.
|
||||
_migration_key_std_opts_v2 = "_seeded_dhcp_standard_options_v2"
|
||||
if not conn.execute("SELECT 1 FROM settings WHERE key=?", (_migration_key_std_opts_v2,)).fetchone():
|
||||
for code, name, opt_type, description in DHCP_STANDARD_OPTIONS:
|
||||
@@ -731,6 +736,21 @@ def _ensure_schema():
|
||||
(code, name, opt_type, description),
|
||||
)
|
||||
conn.execute("INSERT OR IGNORE INTO settings (key, value) VALUES (?, '1')", (_migration_key_std_opts_v2,))
|
||||
# v3: "host-name" (12) als Standard-Option wieder entfernt — Kea
|
||||
# beantwortet die Host-Name-Anfrage eines Clients bei einer Reservierung
|
||||
# bereits automatisch über deren eigenes "hostname"-Feld; ein
|
||||
# zusätzlicher option-data-Override dafür ist laut Kea-Doku eine
|
||||
# Dopplung/Quelle für Widersprüche (live an einer echten Reservierung
|
||||
# nachvollzogen, wo beide gleichzeitig gesetzt waren). Löscht auch
|
||||
# bereits gesetzte Werte für diese Option mit, da sie ohnehin nie
|
||||
# sinnvoll gewirkt hätten.
|
||||
_migration_key_std_opts_v3 = "_removed_dhcp_standard_option_hostname_v3"
|
||||
if not conn.execute("SELECT 1 FROM settings WHERE key=?", (_migration_key_std_opts_v3,)).fetchone():
|
||||
stale = conn.execute("SELECT id FROM dhcp_option_defs WHERE name='host-name' AND is_standard=1").fetchone()
|
||||
if stale:
|
||||
conn.execute("DELETE FROM dhcp_option_values WHERE option_def_id=?", (stale["id"],))
|
||||
conn.execute("DELETE FROM dhcp_option_defs WHERE id=?", (stale["id"],))
|
||||
conn.execute("INSERT OR IGNORE INTO settings (key, value) VALUES (?, '1')", (_migration_key_std_opts_v3,))
|
||||
|
||||
# DHCP: manuelle Reservierungen — im Unterschied zu den automatisch aus
|
||||
# den Clients (devices-Tabelle) erzeugten Reservierungen für Geräte, die
|
||||
|
||||
Reference in New Issue
Block a user