Téléverser les fichiers vers "modules"
This commit is contained in:
@@ -10,7 +10,8 @@ let
|
|||||||
#!${pkgs.expect}/bin/expect -f
|
#!${pkgs.expect}/bin/expect -f
|
||||||
|
|
||||||
# Les secrets arrivent uniquement par stdin depuis l'application.
|
# Les secrets arrivent uniquement par stdin depuis l'application.
|
||||||
# Ils ne sont jamais placés dans argv et le transcript enfant n'est pas affiché.
|
# Ils ne sont jamais placés dans argv. La sortie du processus passwd
|
||||||
|
# reste masquée : seuls des jetons techniques non sensibles sont renvoyés.
|
||||||
log_user 0
|
log_user 0
|
||||||
exp_internal 0
|
exp_internal 0
|
||||||
set timeout 30
|
set timeout 30
|
||||||
@@ -30,22 +31,28 @@ let
|
|||||||
|
|
||||||
spawn -noecho ${pkgs.coreutils}/bin/env LC_ALL=C LANG=C /run/wrappers/bin/passwd
|
spawn -noecho ${pkgs.coreutils}/bin/env LC_ALL=C LANG=C /run/wrappers/bin/passwd
|
||||||
|
|
||||||
# Étape 1 : passwd doit demander le mot de passe actuel.
|
# Étape 1 : authentification du mot de passe actuel.
|
||||||
|
# Selon la pile PAM, l'invite peut être "Current password:",
|
||||||
|
# "(current) UNIX password:" OU simplement "Password:".
|
||||||
|
# Il ne faut donc pas dépendre uniquement des mots Current/Old/UNIX.
|
||||||
expect {
|
expect {
|
||||||
-re {(?i)(current|old|unix).*password.*:} {
|
-re {(?i)(authentication failure|incorrect password|password unchanged|authentication token manipulation error)} {
|
||||||
send -- "$current\r"
|
|
||||||
}
|
|
||||||
-re {(?i)new.*password.*:} {
|
|
||||||
fail "CURRENT_PROMPT_MISSING" 22
|
|
||||||
}
|
|
||||||
-re {(?i)(authentication failure|incorrect password|password unchanged)} {
|
|
||||||
fail "CURRENT_REJECTED" 23
|
fail "CURRENT_REJECTED" 23
|
||||||
}
|
}
|
||||||
|
# Si passwd passe directement au nouveau mot de passe, nous refusons :
|
||||||
|
# l'assistant doit toujours vérifier le mot de passe temporaire actuel.
|
||||||
|
-re {(?i)(new|retype|repeat|confirm)[^\r\n]*(password|passphrase)[^\r\n]*[:?]} {
|
||||||
|
fail "CURRENT_PROMPT_MISSING" 22
|
||||||
|
}
|
||||||
|
# Invite PAM générique, notamment "Password:".
|
||||||
|
-re {(?i)(password|passphrase)[^\r\n]*[:?]} {
|
||||||
|
send -- "$current\r"
|
||||||
|
}
|
||||||
eof {
|
eof {
|
||||||
fail "CURRENT_REJECTED" 24
|
fail "EARLY_EOF_CURRENT" 24
|
||||||
}
|
}
|
||||||
timeout {
|
timeout {
|
||||||
fail "TIMEOUT_CURRENT" 124
|
fail "TIMEOUT_CURRENT_PROMPT" 124
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,49 +61,54 @@ let
|
|||||||
# Étape 2 : le nouveau mot de passe n'est envoyé qu'après validation
|
# Étape 2 : le nouveau mot de passe n'est envoyé qu'après validation
|
||||||
# du mot de passe actuel par passwd/PAM.
|
# du mot de passe actuel par passwd/PAM.
|
||||||
expect {
|
expect {
|
||||||
-re {(?i)new.*password.*:} {
|
|
||||||
send -- "$newpass\r"
|
|
||||||
}
|
|
||||||
# Certains passwd redemandent immédiatement le mot de passe courant
|
|
||||||
# après une erreur. On s'arrête sans envoyer une seconde tentative.
|
|
||||||
-re {(?i)(current|old|unix).*password.*:} {
|
|
||||||
fail "CURRENT_REJECTED" 25
|
|
||||||
}
|
|
||||||
-re {(?i)(authentication failure|incorrect password|password unchanged)} {
|
-re {(?i)(authentication failure|incorrect password|password unchanged)} {
|
||||||
fail "CURRENT_REJECTED" 25
|
fail "CURRENT_REJECTED" 25
|
||||||
}
|
}
|
||||||
|
-re {(?i)new[^\r\n]*(password|passphrase)[^\r\n]*[:?]} {
|
||||||
|
send -- "$newpass\r"
|
||||||
|
}
|
||||||
|
# Une invite générique "Password:" à ce stade est ambiguë : elle peut
|
||||||
|
# être une nouvelle demande du mot de passe actuel. Par sécurité nous
|
||||||
|
# ne tentons jamais une seconde authentification automatiquement.
|
||||||
|
-re {(?i)(password|passphrase)[^\r\n]*[:?]} {
|
||||||
|
fail "CURRENT_REPROMPT" 25
|
||||||
|
}
|
||||||
eof {
|
eof {
|
||||||
fail "CURRENT_REJECTED" 26
|
fail "EARLY_EOF_NEW" 26
|
||||||
}
|
}
|
||||||
timeout {
|
timeout {
|
||||||
fail "TIMEOUT_NEW" 124
|
fail "TIMEOUT_NEW_PROMPT" 124
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Étape 3 : confirmation. Un nouveau prompt "New password" à ce stade
|
# Étape 3 : confirmation du nouveau mot de passe.
|
||||||
# signifie que PAM/passwd a refusé la valeur proposée.
|
|
||||||
expect {
|
expect {
|
||||||
-re {(?i)(retype|repeat|confirm).*password.*:} {
|
-re {(?i)(bad password|password unchanged|authentication token manipulation error)} {
|
||||||
|
fail "NEW_REJECTED" 27
|
||||||
|
}
|
||||||
|
-re {(?i)(retype|repeat|confirm)[^\r\n]*(password|passphrase)[^\r\n]*[:?]} {
|
||||||
send -- "$confirm\r"
|
send -- "$confirm\r"
|
||||||
}
|
}
|
||||||
-re {(?i)new.*password.*:} {
|
-re {(?i)new[^\r\n]*(password|passphrase)[^\r\n]*[:?]} {
|
||||||
fail "NEW_REJECTED" 27
|
fail "NEW_REJECTED" 27
|
||||||
}
|
}
|
||||||
eof {
|
eof {
|
||||||
fail "NEW_REJECTED" 28
|
fail "EARLY_EOF_CONFIRM" 28
|
||||||
}
|
}
|
||||||
timeout {
|
timeout {
|
||||||
fail "TIMEOUT_CONFIRM" 124
|
fail "TIMEOUT_CONFIRM_PROMPT" 124
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set newpass ""
|
set newpass ""
|
||||||
set confirm ""
|
set confirm ""
|
||||||
|
|
||||||
|
# Étape 4 : passwd doit maintenant terminer. Toute nouvelle invite de
|
||||||
|
# mot de passe signifie que la modification n'a pas été acceptée.
|
||||||
expect {
|
expect {
|
||||||
eof {}
|
eof {}
|
||||||
-re {(?i)new.*password.*:} {
|
-re {(?i)(password|passphrase)[^\r\n]*[:?]} {
|
||||||
fail "NEW_REJECTED" 29
|
fail "UNEXPECTED_PASSWORD_REPROMPT" 29
|
||||||
}
|
}
|
||||||
timeout {
|
timeout {
|
||||||
fail "TIMEOUT_FINISH" 124
|
fail "TIMEOUT_FINISH" 124
|
||||||
@@ -232,7 +244,7 @@ let
|
|||||||
|
|
||||||
workstationSetup = pkgs.stdenv.mkDerivation {
|
workstationSetup = pkgs.stdenv.mkDerivation {
|
||||||
pname = "nixos-workstations-setup";
|
pname = "nixos-workstations-setup";
|
||||||
version = "1.3.0";
|
version = "1.4.0";
|
||||||
|
|
||||||
src = ../workstation-setup;
|
src = ../workstation-setup;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user