From eb94c91c2ec81dc3dd673ed924f0d153508ed775 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Fri, 16 Oct 2009 07:25:13 +0000 Subject: [PATCH] ecrire_acces() disparait, la generation du htpass pour la methode 'spip' etant du ressort de auth_spip_synchroniser_distant Cette derniere regenere tous les acces, mais il y aurait moyen de faire mieux en ne mettant a jour que l'acces modifie qui est passe en arg. Legere modification de l'api auth_synchroniser_distant qui peut etre appelee sans argument pour forcer une resynchro de toutes les methodes et acces apres une operation en base. --- ecrire/auth/spip.php | 53 ++++++++++++++++++++++++++++++++++++ ecrire/base/import_all.php | 5 +++- ecrire/base/upgrade.php | 4 +-- ecrire/inc/acces.php | 41 ---------------------------- ecrire/inc/auth.php | 17 ++++++++++-- ecrire/inc/modifier.php | 9 ------ ecrire/install/etape_fin.php | 3 +- 7 files changed, 75 insertions(+), 57 deletions(-) diff --git a/ecrire/auth/spip.php b/ecrire/auth/spip.php index 5cb50f9ed7..456e038ef4 100644 --- a/ecrire/auth/spip.php +++ b/ecrire/auth/spip.php @@ -194,4 +194,57 @@ function auth_spip_modifier_pass($login, $new_pass, $id_auteur){ } +/** + * Synchroniser les fichiers htpasswd + * + * @param int $id_auteur + * @param array $champs + * @param array $options + * all=>true permet de demander la regeneration complete des acces apres operation en base (import, upgrade) + * @return void + */ +function auth_spip_synchroniser_distant($id_auteur, $champs, $options = array()){ + // si un login, pass ou statut a ete modifie + // regenerer les fichier htpass + if (isset($champs['login']) + OR isset($champs['pass']) + OR isset($champs['statut']) + OR (isset($options['all']) AND $options['all']) + ) { + + $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; + $htpasswd = _DIR_TMP . _AUTH_USER_FILE; + + // Cette variable de configuration peut etre posee par un plugin + // par exemple acces_restreint ; + // si .htaccess existe, outrepasser spip_meta + if (($GLOBALS['meta']['creer_htpasswd'] != 'oui') + AND !@file_exists($htaccess)) { + spip_unlink($htpasswd); + spip_unlink($htpasswd."-admin"); + return; + } + + # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre + # de devenir redacteur le cas echeant (auth http)... a nettoyer + // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) + + $p1 = ''; // login:htpass pour tous + $p2 = ''; // login:htpass pour les admins + $s = sql_select("login, htpass, statut", "spip_auteurs", sql_in("statut", array('1comite','0minirezo','nouveau'))); + while ($t = sql_fetch($s)) { + if (strlen($t['login']) AND strlen($t['htpass'])) { + $p1 .= $t['login'].':'.$t['htpass']."\n"; + if ($t['statut'] == '0minirezo') + $p2 .= $t['login'].':'.$t['htpass']."\n"; + } + } + if ($p1) { + ecrire_fichier($htpasswd, $p1); + ecrire_fichier($htpasswd.'-admin', $p2); + spip_log("Ecriture de $htpasswd et $htpasswd-admin"); + } + } +} + ?> \ No newline at end of file diff --git a/ecrire/base/import_all.php b/ecrire/base/import_all.php index 1f1276a0c5..aa8360b2b9 100644 --- a/ecrire/base/import_all.php +++ b/ecrire/base/import_all.php @@ -82,7 +82,10 @@ function base_import_all_dist($titre='', $reprise=false) import_all_fin($request); include_spip('inc/rubriques'); calculer_rubriques(); - if (!$res) ecrire_acces(); // Mise a jour du fichier htpasswd + if (!$res){ + include_spip('inc/auth'); + auth_synchroniser_distant(); // Mise a jour du fichier htpasswd + } // revenir a l'accueil pour finir affiche_progression_javascript('100 %', 0); } diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php index c91e184466..bbeaad1b07 100644 --- a/ecrire/base/upgrade.php +++ b/ecrire/base/upgrade.php @@ -35,8 +35,8 @@ function base_upgrade_dist($titre='', $reprise='') spip_unlink(_DIR_TMP.'charger_plugins_options.php'); spip_unlink(_DIR_TMP.'verifier_plugins.txt'); - include_spip('inc/acces'); - ecrire_acces(); + include_spip('inc/auth'); + auth_synchroniser_distant(); $config = charger_fonction('config', 'inc'); $config(); } diff --git a/ecrire/inc/acces.php b/ecrire/inc/acces.php index d97d2bde2c..8f3f83113a 100644 --- a/ecrire/inc/acces.php +++ b/ecrire/inc/acces.php @@ -147,47 +147,6 @@ function initialiser_sel() { else return ""; } -// Cette fonction ne sert qu'a la connexion en mode http_auth.non LDAP -// Son role est de creer le fichier htpasswd -// Voir le plugin "acces restreint" -// http://doc.spip.org/@ecrire_acces -function ecrire_acces() { - $htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME; - $htpasswd = _DIR_TMP . _AUTH_USER_FILE; - - // Cette variable de configuration peut etre posee par un plugin - // par exemple acces_restreint ; - // si .htaccess existe, outrepasser spip_meta - if (($GLOBALS['meta']['creer_htpasswd'] != 'oui') - AND !@file_exists($htaccess)) { - spip_unlink($htpasswd); - spip_unlink($htpasswd."-admin"); - return; - } - - # remarque : ici on laisse passer les "nouveau" de maniere a leur permettre - # de devenir redacteur le cas echeant (auth http)... a nettoyer - // attention, il faut au prealable se connecter a la base (necessaire car utilise par install) - - if (spip_connect_ldap()) return; // hum, il faudrait generaliser cela - $p1 = ''; // login:htpass pour tous - $p2 = ''; // login:htpass pour les admins - $s = sql_select("login, htpass, statut", "spip_auteurs", sql_in("statut", array('1comite','0minirezo','nouveau'))); - while ($t = sql_fetch($s)) { - if (strlen($t['login']) AND strlen($t['htpass'])) { - $p1 .= $t['login'].':'.$t['htpass']."\n"; - if ($t['statut'] == '0minirezo') - $p2 .= $t['login'].':'.$t['htpass']."\n"; - } - } - if ($p1) { - ecrire_fichier($htpasswd, $p1); - ecrire_fichier($htpasswd.'-admin', $p2); - spip_log("Ecriture de $htpasswd et $htpasswd-admin"); - } -} - - // http://doc.spip.org/@generer_htpass function generer_htpass($pass) { global $htsalt; diff --git a/ecrire/inc/auth.php b/ecrire/inc/auth.php index a872b0ad4c..78db463a29 100644 --- a/ecrire/inc/auth.php +++ b/ecrire/inc/auth.php @@ -487,13 +487,24 @@ function auth_modifier_pass($auth_methode, $login, $new_pass, $id_auteur){ * donnee lorsque des modifications sont faites dans la base auteur * * @param string $auth_methode + * ici true permet de forcer la synchronisation de tous les acces pour toutes les methodes * @param int $id_auteur * @param array $champs - * @return bool + * @param array $options + * @return void */ -function auth_synchroniser_distant($auth_methode, $id_auteur, $champs){ +function auth_synchroniser_distant($auth_methode=true, $id_auteur=0, $champs=array()){ $args = func_get_args(); - return auth_administrer('synchroniser_distant',$args); + if ($auth_methode===true){ + $args[] = array('all'=>true); // ajouter une option all=>true pour chaque auth + foreach ($GLOBALS['liste_des_authentifications'] as $methode) { + array_shift($args); + array_unshift($args,$methode); + auth_administrer('synchroniser_distant',$args); + } + } + else + auth_administrer('synchroniser_distant',$args); } diff --git a/ecrire/inc/modifier.php b/ecrire/inc/modifier.php index 17b51c9996..36dcd5fb69 100644 --- a/ecrire/inc/modifier.php +++ b/ecrire/inc/modifier.php @@ -264,15 +264,6 @@ function revision_auteur($id_auteur, $c=false) { $auth_methode = sql_getfetsel('source','spip_auteurs','id_auteur='.intval($id_auteur)); include_spip('inc/auth'); auth_synchroniser_distant($auth_methode, $id_auteur, $c); - - // .. mettre a jour les fichiers .htpasswd et .htpasswd-admin - if (isset($c['login']) - OR isset($c['pass']) - OR isset($c['statut']) - ) { - include_spip('inc/acces'); - ecrire_acces(); - } // Si on change login ou mot de passe, deconnecter cet auteur, // sauf si c'est nous-meme ! diff --git a/ecrire/install/etape_fin.php b/ecrire/install/etape_fin.php index 01881474a8..120e148e58 100644 --- a/ecrire/install/etape_fin.php +++ b/ecrire/install/etape_fin.php @@ -20,7 +20,8 @@ include_spip('inc/acces'); // http://doc.spip.org/@install_etape_fin_dist function install_etape_fin_dist() { - ecrire_acces(); + include_spip('inc/auth'); + auth_synchroniser_distant(); $f = str_replace( _FILE_TMP_SUFFIX, '.php', _FILE_CHMOD_TMP); if (file_exists(_FILE_CHMOD_TMP)) { -- GitLab