Geräteverwaltung: Geräte doppelt (Name und IP), Entfernen scheitert mit „Unknown device“ #289

Open
opened 2026-10-31 16:31:08 +00:00 by alf · 2 comments
Owner

Beobachtung (Alf, 2026-10-31)

In der Geräteverwaltung (iris/Iris#284) tauchen Geräte teilweise doppelt auf: einmal mit Namen, einmal als IP („Gerät (192.168.…)“). Das letzte Gerät ließ sich nicht entfernen, die Meldung war „Unknown device“. Dadurch ließ sich das iPhone nicht aussperren.

Vermutete Ursachen (aus dem Code gelesen, am Gerät nicht gemessen)

  1. Doppelte Einträge: Der Mac-Server (IrisRemoteServer.swift, Registrierung vor dem switch) legt für jede Anfrage ohne Header X-Device-ID einen Eintrag ip:<Adresse> mit dem Namen „Gerät ()“ an. Anfragen ohne Header kommen von WebViews, Bild-/Video-Laden, der Share-Extension und ähnlichem, die den Header nicht mitschicken. Dasselbe Gerät steht dann einmal mit seiner UUID und einmal als IP in der Liste.
  2. „Unknown device“ beim Entfernen: RequestPath.pathComponents zerlegt den Pfad ohne Prozent-Dekodierung. Die Clients kodieren die ID in POST /devices/<id>/<aktion>; enthält sie ein % (zum Beispiel IPv6-Link-Local ip:fe80::…%en0) oder ein anderes kodiertes Zeichen, passt die dekodierte ID nicht zum Register, und der Server antwortet 404 „Unknown device“. Das trifft genau die ip:-Einträge.

Zu prüfen

  • Welche ID hatte der nicht entfernbare Eintrag (Datei registeredRemoteDevices_v1 bzw. GET /devices)?
  • Welche Anfragen kommen ohne X-Device-ID und woher?

Möglicher Fix

  • Pfadkomponenten für /devices/<id>/… dekodieren (Mac-Server; Linux-FastAPI dekodiert selbst, aber prüfen).
  • ip:-Einträge nicht mehr anlegen, wenn die Anfrage zu einem bekannten Gerät gehört (zum Beispiel gleiche IP wie ein Gerät mit Namen), oder grundsätzlich keine IP-Einträge anlegen, sondern nur Geräte mit X-Device-ID führen.
  • Bereits vorhandene ip:-Einträge beim Laden aufräumen.
  • Fehlende Header in den Clients nachziehen (WebView-Anfragen, Share-Extension).

Verwandt: iris/Iris#284.

## Beobachtung (Alf, 2026-10-31) In der Geräteverwaltung (iris/Iris#284) tauchen Geräte teilweise doppelt auf: einmal mit Namen, einmal als IP („Gerät (192.168.…)“). Das letzte Gerät ließ sich nicht entfernen, die Meldung war „Unknown device“. Dadurch ließ sich das iPhone nicht aussperren. ## Vermutete Ursachen (aus dem Code gelesen, am Gerät nicht gemessen) 1. **Doppelte Einträge:** Der Mac-Server (`IrisRemoteServer.swift`, Registrierung vor dem `switch`) legt für jede Anfrage ohne Header `X-Device-ID` einen Eintrag `ip:<Adresse>` mit dem Namen „Gerät (<Adresse>)“ an. Anfragen ohne Header kommen von WebViews, Bild-/Video-Laden, der Share-Extension und ähnlichem, die den Header nicht mitschicken. Dasselbe Gerät steht dann einmal mit seiner UUID und einmal als IP in der Liste. 2. **„Unknown device“ beim Entfernen:** `RequestPath.pathComponents` zerlegt den Pfad ohne Prozent-Dekodierung. Die Clients kodieren die ID in `POST /devices/<id>/<aktion>`; enthält sie ein `%` (zum Beispiel IPv6-Link-Local `ip:fe80::…%en0`) oder ein anderes kodiertes Zeichen, passt die dekodierte ID nicht zum Register, und der Server antwortet 404 „Unknown device“. Das trifft genau die `ip:`-Einträge. ## Zu prüfen - Welche ID hatte der nicht entfernbare Eintrag (Datei `registeredRemoteDevices_v1` bzw. `GET /devices`)? - Welche Anfragen kommen ohne `X-Device-ID` und woher? ## Möglicher Fix - Pfadkomponenten für `/devices/<id>/…` dekodieren (Mac-Server; Linux-FastAPI dekodiert selbst, aber prüfen). - `ip:`-Einträge nicht mehr anlegen, wenn die Anfrage zu einem bekannten Gerät gehört (zum Beispiel gleiche IP wie ein Gerät mit Namen), oder grundsätzlich keine IP-Einträge anlegen, sondern nur Geräte mit `X-Device-ID` führen. - Bereits vorhandene `ip:`-Einträge beim Laden aufräumen. - Fehlende Header in den Clients nachziehen (WebView-Anfragen, Share-Extension). Verwandt: iris/Iris#284.
Author
Owner

PR #135 gemergt: test(devices): Geräte-ID mit Prozent und Doppelpunkt (iris/Iris#289)
http://docker:3000/iris/iris-linux-server/pulls/135

Commits:

  • test(devices): Geräte-ID mit Prozent und Doppelpunkt (iris/Iris#289)

Stand: Geräte doppelt und „Unknown device“ beim Entfernen

Befund (aus dem Code, am Gerät nicht gemessen): (1) Der Mac-Server trug jede Anfrage ohne X-Device-ID als ip:<Adresse> ein und doppelte damit echte Geräte. (2) pathComponents wird nicht prozent-dekodiert; eine ID wie ip:fe80::…%en0 kam als …%25en0 an und fand nichts, Antwort 404 „Unknown device“.

Geändert

  • IrisRemoteServer.swift: Geräte werden nur noch mit X-Device-ID in die Liste eingetragen (die ID für Sperre und Freigaben bleibt unverändert); handleDeviceAction dekodiert die ID aus dem Pfad.
  • RegisteredDeviceStore.swift: vorhandene ip:-Einträge werden beim Laden entfernt, sofern sie weder gesperrt noch freigegeben sind.
  • Linux-Server: schon korrekt (trägt nur mit Header ein, FastAPI dekodiert); Test test_device_id_with_percent_and_colon_can_be_removed ergänzt, 8 passed gegen den Dev-Host (Wegwerf-Gerät, rotate: false).

Geprüft: Xcode-Build Iris; Linux-Test.
Nicht geprüft: Der Mac-Server mit echten Geräten (Liste nach dem Neustart, Entfernen eines ip:-Eintrags mit %); da die alten ip:-Einträge beim ersten Start entfernt werden, lässt sich das Entfernen mit % am Mac nicht mehr an Altdaten nachstellen.
Offen: Anfragen ohne Header sind weiter anonym; ein Gerät, das nie einen Header schickt, taucht gar nicht in der Liste auf.

PR #135 gemergt: test(devices): Geräte-ID mit Prozent und Doppelpunkt (iris/Iris#289) http://docker:3000/iris/iris-linux-server/pulls/135 Commits: - test(devices): Geräte-ID mit Prozent und Doppelpunkt (iris/Iris#289) --- **Stand: Geräte doppelt und „Unknown device“ beim Entfernen** **Befund (aus dem Code, am Gerät nicht gemessen):** (1) Der Mac-Server trug jede Anfrage ohne `X-Device-ID` als `ip:<Adresse>` ein und doppelte damit echte Geräte. (2) `pathComponents` wird nicht prozent-dekodiert; eine ID wie `ip:fe80::…%en0` kam als `…%25en0` an und fand nichts, Antwort 404 „Unknown device“. **Geändert** - `IrisRemoteServer.swift`: Geräte werden nur noch mit `X-Device-ID` in die Liste eingetragen (die ID für Sperre und Freigaben bleibt unverändert); `handleDeviceAction` dekodiert die ID aus dem Pfad. - `RegisteredDeviceStore.swift`: vorhandene `ip:`-Einträge werden beim Laden entfernt, sofern sie weder gesperrt noch freigegeben sind. - Linux-Server: schon korrekt (trägt nur mit Header ein, FastAPI dekodiert); Test `test_device_id_with_percent_and_colon_can_be_removed` ergänzt, 8 passed gegen den Dev-Host (Wegwerf-Gerät, `rotate: false`). **Geprüft:** Xcode-Build Iris; Linux-Test. **Nicht geprüft:** Der Mac-Server mit echten Geräten (Liste nach dem Neustart, Entfernen eines `ip:`-Eintrags mit `%`); da die alten `ip:`-Einträge beim ersten Start entfernt werden, lässt sich das Entfernen mit `%` am Mac nicht mehr an Altdaten nachstellen. **Offen:** Anfragen ohne Header sind weiter anonym; ein Gerät, das nie einen Header schickt, taucht gar nicht in der Liste auf.
Author
Owner

PR #290 gemergt: fix(devices): keine ip:-Einträge mehr, Geräte-ID im Pfad dekodieren (iris/Iris#289)
http://docker:3000/iris/Iris/pulls/290

Commits:

  • fix(devices): keine ip:-Einträge mehr, Geräte-ID im Pfad dekodieren (iris/Iris#289)

Stand: Geräte doppelt und „Unknown device“ beim Entfernen

Befund (aus dem Code, am Gerät nicht gemessen): (1) Der Mac-Server trug jede Anfrage ohne X-Device-ID als ip:<Adresse> ein und doppelte damit echte Geräte. (2) pathComponents wird nicht prozent-dekodiert; eine ID wie ip:fe80::…%en0 kam als …%25en0 an und fand nichts, Antwort 404 „Unknown device“.

Geändert

  • IrisRemoteServer.swift: Geräte werden nur noch mit X-Device-ID in die Liste eingetragen (die ID für Sperre und Freigaben bleibt unverändert); handleDeviceAction dekodiert die ID aus dem Pfad.
  • RegisteredDeviceStore.swift: vorhandene ip:-Einträge werden beim Laden entfernt, sofern sie weder gesperrt noch freigegeben sind.
  • Linux-Server: schon korrekt (trägt nur mit Header ein, FastAPI dekodiert); Test test_device_id_with_percent_and_colon_can_be_removed ergänzt, 8 passed gegen den Dev-Host (Wegwerf-Gerät, rotate: false).

Geprüft: Xcode-Build Iris; Linux-Test.
Nicht geprüft: Der Mac-Server mit echten Geräten (Liste nach dem Neustart, Entfernen eines ip:-Eintrags mit %); da die alten ip:-Einträge beim ersten Start entfernt werden, lässt sich das Entfernen mit % am Mac nicht mehr an Altdaten nachstellen.
Offen: Anfragen ohne Header sind weiter anonym; ein Gerät, das nie einen Header schickt, taucht gar nicht in der Liste auf.

PR #290 gemergt: fix(devices): keine ip:-Einträge mehr, Geräte-ID im Pfad dekodieren (iris/Iris#289) http://docker:3000/iris/Iris/pulls/290 Commits: - fix(devices): keine ip:-Einträge mehr, Geräte-ID im Pfad dekodieren (iris/Iris#289) --- **Stand: Geräte doppelt und „Unknown device“ beim Entfernen** **Befund (aus dem Code, am Gerät nicht gemessen):** (1) Der Mac-Server trug jede Anfrage ohne `X-Device-ID` als `ip:<Adresse>` ein und doppelte damit echte Geräte. (2) `pathComponents` wird nicht prozent-dekodiert; eine ID wie `ip:fe80::…%en0` kam als `…%25en0` an und fand nichts, Antwort 404 „Unknown device“. **Geändert** - `IrisRemoteServer.swift`: Geräte werden nur noch mit `X-Device-ID` in die Liste eingetragen (die ID für Sperre und Freigaben bleibt unverändert); `handleDeviceAction` dekodiert die ID aus dem Pfad. - `RegisteredDeviceStore.swift`: vorhandene `ip:`-Einträge werden beim Laden entfernt, sofern sie weder gesperrt noch freigegeben sind. - Linux-Server: schon korrekt (trägt nur mit Header ein, FastAPI dekodiert); Test `test_device_id_with_percent_and_colon_can_be_removed` ergänzt, 8 passed gegen den Dev-Host (Wegwerf-Gerät, `rotate: false`). **Geprüft:** Xcode-Build Iris; Linux-Test. **Nicht geprüft:** Der Mac-Server mit echten Geräten (Liste nach dem Neustart, Entfernen eines `ip:`-Eintrags mit `%`); da die alten `ip:`-Einträge beim ersten Start entfernt werden, lässt sich das Entfernen mit `%` am Mac nicht mehr an Altdaten nachstellen. **Offen:** Anfragen ohne Header sind weiter anonym; ein Gerät, das nie einen Header schickt, taucht gar nicht in der Liste auf.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#289
No description provided.