From 8ec7dc6aaf2993448395119d310d441ab3ec3ad2 Mon Sep 17 00:00:00 2001 From: Johnny Date: Fri, 4 Sep 2026 19:13:50 +0200 Subject: [PATCH] chore(release): v0.7.13 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrige Add-DnsClientNrptRule qui échouait systématiquement : ce cmdlet n'a pas de paramètre -Name (contrairement à Get-/Set-/ Remove-), résolu comme abréviation ambiguë entre -Namespace/ -NameServers/-NameEncoding. Identification de la règle via -Comment à la place, comme le nettoyage générique existant. Bénéficie au chemin élevé classique et au service wgsecure-helper. Co-Authored-By: Claude Sonnet 5 --- CHANGELOG.md | 7 +++++++ Makefile | 2 +- README.md | 4 ++-- app/__init__.py | 2 +- app/core/dns.py | 30 ++++++++++++++++++++++++------ wgsecure.iss | 2 +- 6 files changed, 36 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 423a026..db181ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ Ce projet suit le [Versionnage Sémantique](https://semver.org/lang/fr/). --- +## [0.7.13] — 2026-09-04 + +### Corrigé +- **Pose de la règle split-DNS (NRPT) systématiquement en échec.** `Add-DnsClientNrptRule` n'a pas de paramètre `-Name` (contrairement à `Get-`/`Set-`/`Remove-DnsClientNrptRule` : la règle créée reçoit un identifiant GUID auto-généré) — `-Name` était résolu par PowerShell comme une abréviation ambiguë entre `-Namespace`/`-NameServers`/`-NameEncoding` (« le nom du paramètre "name" est ambigu »). Bug présent depuis l'introduction du split-DNS, resté invisible jusqu'à la v0.7.9 (les messages d'erreur d'une commande élevée remontaient vides). La règle est désormais identifiée/retrouvée via `-Comment`, comme le fait déjà le nettoyage générique du fichier. Corrige à la fois le chemin élevé classique et le service `wgsecure-helper` (v0.7.12), qui réutilise cette même fonction. + +--- + ## [0.7.12] — 2026-09-04 ### Ajouté diff --git a/Makefile b/Makefile index 9ad10e9..69f7f28 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ ## ────────────────────────────────────────────── APP := wgsecure -VERSION := 0.7.12 +VERSION := 0.7.13 VENV := .venv PYTHON := $(VENV)/bin/python3 PIP := $(VENV)/bin/pip diff --git a/README.md b/README.md index eacfbba..c7d6f30 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 🛡️ WGSecure (WGS) -🚀 v0.7.12 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard +🚀 v0.7.13 · 🐍 · 🪟🐧 · 🔐 MFA TOTP · 🛡️ WireGuard **WGSecure** est une interface graphique multiplateforme (Windows & Linux) pour gérer une connexion WireGuard avec une surcouche MFA (authentification à deux facteurs TOTP). @@ -210,4 +210,4 @@ WGSecure/ ## 👤 Auteur Développé par **Johnny** — [JT-Tools](https://github.com/JT-Tools) -Version : ![v0.7.12](https://img.shields.io/badge/v0.7.12-septembre%202026-2980b9?style=flat-square) — Septembre 2026 +Version : ![v0.7.13](https://img.shields.io/badge/v0.7.13-septembre%202026-2980b9?style=flat-square) — Septembre 2026 diff --git a/app/__init__.py b/app/__init__.py index c7dc049..0f49901 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,3 +1,3 @@ -__version__ = "0.7.12" +__version__ = "0.7.13" APP_NAME = "WGSecure" APP_SHORT = "WGS" diff --git a/app/core/dns.py b/app/core/dns.py index 31681f1..5442300 100644 --- a/app/core/dns.py +++ b/app/core/dns.py @@ -191,11 +191,22 @@ def _nrpt_add_split_dns_ps(server: str, domains: list[str], rule_name: str) -> s # même. Les deux formes sont nécessaires pour couvrir toute la zone — # comme `~domaine` sous systemd-resolved (Linux) couvre déjà les deux. namespace_list = ", ".join(f"'{d}', '.{d}'" for d in clean) + # Add-DnsClientNrptRule n'a PAS de paramètre -Name (contrairement à + # Get-/Set-/Remove-) : la règle créée reçoit un identifiant GUID auto- + # généré, jamais le nôtre. "-Name" était donc résolu par PowerShell + # comme une abréviation ambiguë entre -Namespace/-NameServers/ + # -NameEncoding (« le nom du paramètre "name" est ambigu ») — la pose de + # la règle échouait donc systématiquement, masqué jusqu'ici par + # l'ancienne incapacité à remonter le texte d'une erreur élevée. On + # identifie/retrouve donc la règle via -Comment (qui, lui, existe bien + # sur Add-), comme le fait déjà le nettoyage générique plus bas + # (_NRPT_CLEAN_PS, filtré sur .Comment). return ( - f"$rule = Get-DnsClientNrptRule -Name '{rule_name}' -ErrorAction SilentlyContinue; " - f"if ($rule) {{ Remove-DnsClientNrptRule -Name '{rule_name}' -Force -ErrorAction SilentlyContinue }}; " - f"Add-DnsClientNrptRule -Name '{rule_name}' -Namespace @({namespace_list}) " - f"-NameServer '{server}' -Comment 'WGSecure Split-DNS'; " + f"Get-DnsClientNrptRule -ErrorAction SilentlyContinue | " + f"Where-Object {{ $_.Comment -eq '{rule_name}' }} | " + f"ForEach-Object {{ Remove-DnsClientNrptRule -Name $_.Name -Force -ErrorAction SilentlyContinue }}; " + f"Add-DnsClientNrptRule -Namespace @({namespace_list}) " + f"-NameServers '{server}' -Comment '{rule_name}'; " # Sans ce contrôle, une erreur réelle d'Add-DnsClientNrptRule restait # invisible : le script se terminait quand même avec le code 0, et # `setup_split_dns` rapportait un succès alors que la règle n'avait @@ -205,9 +216,16 @@ def _nrpt_add_split_dns_ps(server: str, domains: list[str], rule_name: str) -> s def _nrpt_remove_split_dns_ps(rule_name: str) -> str: - """PowerShell script to remove a NRPT rule for split-DNS.""" + """PowerShell script to remove a NRPT rule for split-DNS. + + La règle n'a pas de -Name pris en charge à la création (cf. + `_nrpt_add_split_dns_ps`) : on la retrouve par son -Comment plutôt que + par un -Name qui ne correspondrait jamais à rien. + """ return ( - f"Remove-DnsClientNrptRule -Name '{rule_name}' -Force -ErrorAction SilentlyContinue" + f"Get-DnsClientNrptRule -ErrorAction SilentlyContinue | " + f"Where-Object {{ $_.Comment -eq '{rule_name}' }} | " + f"ForEach-Object {{ Remove-DnsClientNrptRule -Name $_.Name -Force -ErrorAction SilentlyContinue }}" ) diff --git a/wgsecure.iss b/wgsecure.iss index 7b420a5..48c9904 100644 --- a/wgsecure.iss +++ b/wgsecure.iss @@ -5,7 +5,7 @@ ; ────────────────────────────────────────────── #define MyAppName "WGSecure" -#define MyAppVersion "0.7.12" +#define MyAppVersion "0.7.13" #define MyAppPublisher "WGSecure" #define MyAppExeName "wgsecure.exe"