chore(release): v0.7.8

Corrige l'ACL du service WireGuard (bouton "Configurer les permissions")
qui n'était en réalité jamais posée : la SDDL était lue via
Get-WmiObject.DACL.ToString(), qui ne produit pas de SDDL valide.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 16:49:51 +02:00
co-authored by Claude Sonnet 5
parent 6fb0e0dc18
commit 73c102cc35
6 changed files with 40 additions and 15 deletions
+28 -10
View File
@@ -1908,26 +1908,44 @@ class AdminWindow(QDialog):
# Commande PowerShell pour modifier les ACLs du service WireGuard
# Ajoute à l'utilisateur actuel les droits de créer/supprimer des services WireGuardTunnel*
ps_script = r'''
$ErrorActionPreference = 'Stop'
$serviceName = "WireGuard"
$currentUserSid = [System.Security.Principal.WindowsIdentity]::GetCurrent().User.Value
# Récupérer la SDDL actuelle
$currentSddl = (Get-WmiObject -Class Win32_Service -Filter "Name='$serviceName'").GetSecurityDescriptor().Descriptor.DACL.ToString()
# Récupérer la SDDL actuelle au format texte natif : "sc sdshow", pas WMI.
# Win32_Service.GetSecurityDescriptor().Descriptor.DACL est un TABLEAU
# d'objets Win32_ACE — .ToString() dessus ne produit pas une chaîne SDDL
# valide (ça donnait un texte type "System.Management.ManagementBaseObject[]",
# jamais vérifié ni signalé), donc "sc sdset" échouait silencieusement et
# le bouton annonçait un succès alors que l'ACL n'était jamais posée —
# d'où une invite d'élévation qui persistait pour le tunnel en plus de
# celle, inévitable, du split-DNS.
$sdshowLines = & sc.exe sdshow $serviceName
$currentSddl = ($sdshowLines | Where-Object { $_ -like 'D:*' } | Select-Object -First 1)
if (-not $currentSddl) {
throw "Lecture de la SDDL actuelle de '$serviceName' impossible (sc sdshow)"
}
$currentSddl = $currentSddl.Trim()
# Ajouter l'utilisateur actuel avec les permissions nécessaires
# Ajouter l'utilisateur actuel avec les permissions nécessaires, à
# l'intérieur de la clause D: existante (jamais en concaténant deux
# préfixes "D:" distincts, ce qui produit une SDDL invalide) :
# CC = Create Child (créer des services enfants)
# LC = List Child (lister les services enfants)
# LC = List Child (lister les services enfants)
# SW = Self Write (modifier ses propres services)
# LO = List Object (lister)
# CR = Control (contrôle)
$newAcl = "D:(A;;CCLCSWLOCRRC;;;$currentUserSid)"
$fullSddl = $currentSddl + "(A;;CCLCSWLOCRRC;;;$currentUserSid)"
# Appliquer la nouvelle SDDL (en ajoutant aux ACLs existantes)
$fullSddl = $currentSddl + $newAcl
sc sdset $serviceName $fullSddl
$setOutput = & sc.exe sdset $serviceName $fullSddl
if ($LASTEXITCODE -ne 0) {
throw "sc sdset a échoué (code $LASTEXITCODE) : $setOutput"
}
# Redémarrer le service pour appliquer les changements
Restart-Service -Name $serviceName -Force -ErrorAction SilentlyContinue
# Redémarrer le service pour que la nouvelle ACL soit prise en compte par
# le pipe IPC déjà ouvert (une SDDL mise à jour n'est pas relue par un
# process déjà démarré).
Restart-Service -Name $serviceName -Force
# Mécanisme officiel WireGuard (distinct de l'ACL ci-dessus, qui ne couvre
# que le service) : autorise les membres du groupe "Network Configuration