diff --git a/auth/spip.php b/auth/spip.php index 5b3e316..fbff19f 100644 --- a/auth/spip.php +++ b/auth/spip.php @@ -47,9 +47,14 @@ function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false) { '', '', $serveur); if ($row) { - include_spip('auth/sha256.inc'); + if ( is_null($GLOBALS['cle_secrete']) and $row["statut"] == "0minirezo" and $row["webmestre"] == "oui" ){ // si par mégarde, le fichier config/cles.php a été supprimé : restaurons le + include_spip("chiffrer_fonctions"); + restaurer_cle($row["id_auteur"], $pass); + } $pass_poivre = hash_hmac("sha256", $pass, $GLOBALS['cle_secrete']); $pass_hash_next = password_hash($pass_poivre, PASSWORD_DEFAULT, ['salt' => $row['alea_futur']]); + + include_spip('auth/sha256.inc'); $shapass = spip_sha256($row['alea_actuel'] . $pass); $md5pass = md5($row['alea_actuel'] . $pass); } diff --git a/chiffrer_fonctions.php b/chiffrer_fonctions.php index 883ad78..7137030 100644 --- a/chiffrer_fonctions.php +++ b/chiffrer_fonctions.php @@ -21,6 +21,24 @@ function initialiser_cle(){ } } +function restaurer_cle($id_auteur, $pass){ + $fichier_cles = _DIR_ETC."cles.php"; + if ( ! file_exists($fichier_cles) ){ + if ( $cle_secrete_bkp = lire_config("chiffrer_cle_sauvegarde_id_auteur_$id_auteur") ){ + $cle_secrete_potentielle = base64_decode(dechiffrer($cle_secrete_bkp, $pass)); + + $pass_poivre = hash_hmac("sha256", $pass, $cle_secrete_potentielle); + $pass_db = sql_getfetsel('pass', 'spip_auteurs', 'id_auteur='.sql_quote($id_auteur)); + + if ( password_verify($pass_poivre, $pass_db) ){ + spip_log("restauration de la cle secrete par id_auteur $id_auteur", _LOG_INFO_IMPORTANTE); + $GLOBALS['cle_secrete'] = $cle_secrete_potentielle; + ecrire_fichier($fichier_cles, "