Files

1.6 KiB

NixOS Workstations Setup v1.2 LAB

Correctif bloquant

La v1.1 calculait m_authorizedUser dans la liste d'initialisation du constructeur alors que ce membre était déclaré avant m_currentUser et m_targetUser dans la classe. En C++, l'ordre réel d'initialisation suit l'ordre de déclaration des membres, et non l'ordre de la liste du constructeur. Le booléen pouvait donc être évalué avant la construction des deux chaînes, provoquant notamment :

ERREUR: l'assistant est prévu pour alice mais il est exécuté par alice

La v1.2 supprime complètement ce booléen mémorisé. authorizedUser() résout désormais le compte cible avec getpwnam() et compare son UID avec geteuid(). L'autorisation ne dépend donc plus de l'ordre d'initialisation ni d'une comparaison de chaînes.

La compilation GCC/Clang active aussi -Werror=reorder afin qu'une future incohérence d'ordre d'initialisation des membres fasse échouer le build.

Diagnostic

--diagnose affiche aussi les deux noms d'utilisateur en hexadécimal UTF-8 afin de rendre visibles d'éventuels caractères invisibles :

nixos-workstations-setup --target-user alice --diagnose

Pour alice, le résultat attendu contient :

current_user=alice
target_user=alice
current_user_utf8_hex=616c696365
target_user_utf8_hex=616c696365
authorized=yes

Comportement attendu

L'assistant modifie les secrets de l'utilisateur qui l'exécute. Il doit donc être lancé dans la session alice avec --target-user alice. Une exécution depuis localadm avec --target-user alice est volontairement refusée.