36 lines
1.6 KiB
Markdown
36 lines
1.6 KiB
Markdown
# 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 :
|
|
|
|
```text
|
|
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 :
|
|
|
|
```bash
|
|
nixos-workstations-setup --target-user alice --diagnose
|
|
```
|
|
|
|
Pour `alice`, le résultat attendu contient :
|
|
|
|
```text
|
|
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.
|