diff --git a/ecrire/auth/spip.php b/ecrire/auth/spip.php index 5cb50f9ed7b1cad80354a411f0963030a071817a..456e038ef4ed8279d447988ab07d146d27879221 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 1f1276a0c55e00e528bd651f834eb088a8b66505..aa8360b2b9ba9b375bde77fa6e54f01707e2be61 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 c91e184466337c5d0b3cfecd5e9476ff9ecfcb2e..bbeaad1b075f40488ffbbe50742582b3a5bd8a37 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 d97d2bde2cff20c68b99dff915476bbbad212417..8f3f83113a9636a1605340a2bbd142b5ef897906 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 a872b0ad4cb4168cdd93d134e012e79ddf6e5402..78db463a29247dc258988aecedef870b2298437b 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 17b51c999661ed4ed1f53cb160e02f3398df23ae..36dcd5fb6984212efea2da2608225a5aeac73c9a 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 01881474a80210500a56f88a88f8fdd1bcea9f45..120e148e58c3d9d72cabd543845391c842ef9098 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)) {