diff --git a/apps/tesm/pyproject.toml b/apps/tesm/pyproject.toml index 0cc3389..e6f8aea 100644 --- a/apps/tesm/pyproject.toml +++ b/apps/tesm/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm" -version = "2.8.44" +version = "2.8.45" description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen" requires-python = ">=3.11" dependencies = [ diff --git a/apps/tesm/src/tesm/services/kea.py b/apps/tesm/src/tesm/services/kea.py index 2335f16..c30ad0e 100644 --- a/apps/tesm/src/tesm/services/kea.py +++ b/apps/tesm/src/tesm/services/kea.py @@ -903,10 +903,33 @@ def client_konfiguration(conn: sqlite3.Connection, stil: str) -> dict[str, Any]: "inhalt": inhalt, "nachher": nachher, "skript": _uebernahme_skript(stil, inhalt), + "auslesen": _auslesen(stil, codes), "optionen": optionen, } +def _auslesen(stil: str, codes: list[int]) -> str: + """Wie der Wert auf dem Client wieder herauskommt. + + Gehoert dazu, weil "angekommen" sonst niemand pruefen kann -- und weil ein + RMM-Agent genau diese Zeile braucht. Bei systemd-networkd steht der Wert + **hexkodiert** in der Lease: systemd kennt fremde Optionen nicht und legt + sie roh ab. Ohne das Umrechnen liest man 687474703a... und haelt es fuer + Unsinn. + """ + if not codes: + return "" + code = codes[0] + if stil == "networkd": + return ( + "lease=/run/systemd/netif/leases/$(cat /sys/class/net/$IF/ifindex); " + f"/usr/bin/printf \"$(sed -n 's/^OPTION_{code}=//p' \"$lease\" | sed 's/../\\\\x&/g')\"" + ) + if stil == "dhcpcd": + return "dhcpcd -U $IF | grep -i '^url='" + return "grep -i 'option url' /var/lib/dhcp/dhclient.leases | tail -n1" + + def _uebernahme_skript(stil: str, inhalt: str) -> str: """Das Skript, das die Konfiguration auf dem Client eintraegt. diff --git a/apps/tesm/src/tesm/templates/tesm/dhcp.html b/apps/tesm/src/tesm/templates/tesm/dhcp.html index a6aa82e..d5db117 100644 --- a/apps/tesm/src/tesm/templates/tesm/dhcp.html +++ b/apps/tesm/src/tesm/templates/tesm/dhcp.html @@ -445,6 +445,13 @@
{{ konfig.inhalt }}
{{ konfig.nachher }}{{ konfig.auslesen }}
+