fix(station): nmcli-Werte unmaskiert lesen, Doppelpunkt im Profilnamen

nmcli -t maskiert Doppelpunkte in Werten als \: und cut -d: -f2 schneidet
ohnehin am ersten Doppelpunkt ab. Ein Profilname mit Doppelpunkt lieferte der
Nachpruefung in ap_switch() damit einen abgeschnittenen Wert - und der Fehler
zeigte in die unsichere Richtung: "Station aus" gemeldet, waehrend der
Zugangspunkt weitersendet. Jetzt --escape no plus cut -f2-, auch bei den beiden
Profilabfragen und in der Statusausgabe.

Der nmcli-Stub in test_cli.sh maskiert jetzt wie das echte nmcli, sonst waere
der neue Zusatzfall M1 mit und ohne Fix gruen.
This commit is contained in:
Michael Sauer
2026-09-15 03:44:50 +02:00
parent 4e1a965cbb
commit c296e2626e
2 changed files with 80 additions and 8 deletions
+14 -5
View File
@@ -124,7 +124,7 @@ need_profile() {
# $1 = NetworkManager-Profilname, der existieren muss.
# -F: der Profilname ist ein Konfigurationswert, kein BRE-Muster - ein Name mit
# "." oder "[" wuerde mit "grep -x" sonst falsch (oder gar nicht) treffen.
nmcli -t -f NAME con show | grep -Fqx "$1" || {
nmcli -t --escape no -f NAME con show | grep -Fqx "$1" || {
echo "Fehler: NetworkManager-Profil '$1' fehlt - tools/station/setup_pi.sh ausfuehren" >&2
exit 1
}
@@ -266,7 +266,15 @@ ap_switch() {
# zeigt, und erst dann Erfolg melden (Fixrunde 1, I2) - sonst kann z.B. der
# Migrations-AP mit oeffentlich bekanntem Passwort weitersenden, waehrend
# das CLI "Station aus" behauptet.
_active=$(nmcli -t -f GENERAL.CONNECTION device show wlan0 2>/dev/null | cut -d: -f2)
# --escape no und "-f2-" gehoeren zusammen (Abschlussreview, M1): "nmcli -t"
# maskiert Doppelpunkte IN WERTEN als "\:", und "cut -f2" schneidet ohnehin am
# ersten Doppelpunkt ab. Ein Profilname mit Doppelpunkt ergaebe so einen
# abgeschnittenen Wert, der Vergleich unten schluege fehl - und zwar in die
# UNSICHERE Richtung: "Station aus" gemeldet, waehrend der Zugangspunkt
# weitersendet. --escape no liefert den Rohwert, -f2- nimmt den ganzen Rest der
# Zeile (die Ausgabe hat genau ein Feld, alles nach dem ersten Doppelpunkt
# gehoert zum Wert).
_active=$(nmcli -t --escape no -f GENERAL.CONNECTION device show wlan0 2>/dev/null | cut -d: -f2-)
if [ "$_active" = "$AP_CONNECTION" ] || [ "$_active" = "$MIGRATE_AP_CONNECTION" ]; then
echo "Fehler: wlan0 zeigt nach dem Ausschalten immer noch '$_active' aktiv - NetworkManager pruefen (Zugangspunkt bleibt an)" >&2
return 1
@@ -274,7 +282,8 @@ ap_switch() {
return 0
fi
sudo nmcli con up "$_target" >/dev/null
_active=$(nmcli -t -f GENERAL.CONNECTION device show wlan0 2>/dev/null | cut -d: -f2)
# --escape no / -f2- aus demselben Grund wie oben.
_active=$(nmcli -t --escape no -f GENERAL.CONNECTION device show wlan0 2>/dev/null | cut -d: -f2-)
if [ "$_active" != "$_target" ]; then
sudo nmcli con down "$AP_CONNECTION" >/dev/null 2>&1 || true
sudo nmcli con down "$MIGRATE_AP_CONNECTION" >/dev/null 2>&1 || true
@@ -835,7 +844,7 @@ full_off() {
# macht "off" unabhaengig vom Anzeigedienst - ob der installiert, aktiv oder gerade
# gescheitert ist, hat auf das Abschalten der Station keinen Einfluss.
ap_switch ""
if nmcli -t -f NAME con show | grep -Fqx "$HOME_CONNECTION"; then
if nmcli -t --escape no -f NAME con show | grep -Fqx "$HOME_CONNECTION"; then
if sudo nmcli con up "$HOME_CONNECTION" >/dev/null; then
echo "Station aus, wlan0 zurueck im Heim-WLAN ($HOME_CONNECTION)"
else
@@ -1041,7 +1050,7 @@ PY
printf 'Erkannt: %s\n' "$_erkannt"
printf 'Dienst : %s\n' "$(systemctl is-active ninlight-station 2>/dev/null || true)"
autooff_status_line
printf 'wlan0 : %s\n' "$(nmcli -t -f GENERAL.CONNECTION device show wlan0 2>/dev/null | cut -d: -f2)"
printf 'wlan0 : %s\n' "$(nmcli -t --escape no -f GENERAL.CONNECTION device show wlan0 2>/dev/null | cut -d: -f2-)"
printf 'Adresse: %s\n' "$(ip -4 -br addr show wlan0 2>/dev/null | awk '{print $3}')"
echo "Images :"
images | while read -r f; do