fix: DNS coupée après arrêt du tunnel, gel UI, dialogues sudo à répétition
- wg-quick down échoue silencieusement si l'interface a déjà disparu (crash, kill, veille) et ne retire donc jamais l'entrée DNS posée par wg-quick up : la résolution reste pointée sur un résolveur mort. Ajout d'un nettoyage DNS inconditionnel (app/core/dns.py) déclenché à la connexion, la déconnexion, la fermeture et au démarrage suivant. - is_connected() se basait sur `wg show`, qui rend un code 0 même en cas d'échec de permission pour un utilisateur non-root : l'app se croyait déconnectée en permanence et ne démontait donc jamais le tunnel à la fermeture. Détection réécrite via sysfs (sans privilèges). - Connexion/déconnexion et ping tournaient sur le thread Qt : gel de l'UI pendant les élévations de privilèges. Déportés dans des QThread (app/ui/worker.py). - Restauration réseau garantie sur toutes les sorties (croix, tray, SIGINT/SIGTERM, atexit, exception) via app/core/shutdown.py. - run_privileged() : la détection "sudo veut un mot de passe" ratait en session non-anglophone et sur les comptes ALL=(ALL) ALL ; réécrite pour se fier au message d'erreur réel plutôt qu'à `sudo -l`. - Écriture de la config WireGuard dans /etc/wireguard (root:root 0700) passe maintenant par install -D via la chaîne de privilèges complète au lieu d'un tee non autorisé par les sudoers. - Ajout d'un diagnostic des droits (make check-privileges, bouton Admin) et mise à jour de setup-sudoers pour couvrir toutes les commandes désormais utilisées.
This commit is contained in:
+8
-11
@@ -104,18 +104,15 @@ class SystemTray(QSystemTrayIcon):
|
||||
|
||||
def _toggle_connection(self):
|
||||
self._win._on_connect()
|
||||
self._update_status()
|
||||
# La (dé)connexion est désormais asynchrone : l'icône sera mise à jour
|
||||
# par la scrutation périodique une fois l'opération terminée.
|
||||
|
||||
def _quit(self):
|
||||
self._poll.stop()
|
||||
try:
|
||||
if wg_core.is_connected(self._cfg):
|
||||
wg_core.disconnect(self._cfg)
|
||||
except Exception:
|
||||
pass
|
||||
self._win._status_timer.stop()
|
||||
self._win._clock_timer.stop()
|
||||
self._win._bw_timer.stop()
|
||||
self._win._ping_timer.stop()
|
||||
self._win._reconnect_timer.stop()
|
||||
self.hide()
|
||||
# prepare_quit() arrête les minuteries, attend les threads en cours,
|
||||
# démonte le tunnel et retire la configuration DNS qu'il avait posée.
|
||||
# Sans cela, quitter en étant connecté laissait la machine sans
|
||||
# résolution de noms.
|
||||
self._win.prepare_quit()
|
||||
QApplication.quit()
|
||||
|
||||
Reference in New Issue
Block a user