From e869d0a65a1bcb5114d8947411417679120c18c5 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sun, 25 Jun 2006 21:44:44 +0000
Subject: [PATCH] =?UTF-8?q?R=C3=A9solution=20des=20principaux=20cas=20bloq?=
 =?UTF-8?q?uant=20le=20mod=5Fsecurity=20d'Apache=20(ticket=20#413).=20Les?=
 =?UTF-8?q?=20redirections=20du=20r=C3=A9pertoire=20action/=20vers=20le=20?=
 =?UTF-8?q?r=C3=A9pertoire=20exec/=20command=C3=A9es=20par=20ce=20dernier?=
 =?UTF-8?q?=20sont=20=C3=A0=20pr=C3=A9sent=20toujours=20exprim=C3=A9es=20e?=
 =?UTF-8?q?n=20relatif=20(c'=C3=A9tait=20d'ailleurs=20d=C3=A9j=C3=A0=20le?=
 =?UTF-8?q?=20cas=20de=20certaines,=20qui=20n'utilisaient=20pas=20generer?=
 =?UTF-8?q?=5Furl=5Fecrire),=20afin=20d'=C3=A9viter=20la=20production=20pa?=
 =?UTF-8?q?ram=3Dhttp://=20...=20dans=20l'URL.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Reste à traiter une redirection de action/  vers l'espace public, et toutes
les redirections public->public ou privé->privé, moins fréquentes mais à faire
au cas par cas.
---
 ecrire/exec/articles.php    |  4 ++--
 ecrire/exec/breves_voir.php |  6 ++----
 ecrire/exec/naviguer.php    |  4 ++--
 ecrire/inc/auteur_voir.php  | 13 ++++++++-----
 ecrire/inc/config.php       |  3 +--
 ecrire/inc/documents.php    |  5 ++---
 ecrire/inc/forum.php        |  9 +++++----
 ecrire/inc/logos.php        |  2 +-
 ecrire/inc/presentation.php |  5 +++--
 ecrire/inc/session.php      |  5 +++++
 ecrire/inc/sites_voir.php   |  8 ++++----
 ecrire/inc/utils.php        |  2 +-
 12 files changed, 36 insertions(+), 30 deletions(-)

diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index ba69ba1533..8893aee78d 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -206,7 +206,7 @@ if ($flag_auteur AND $statut_article == 'prepa') {
 		"<B>"._T('texte_proposer_publication')."</B>",
 		aide ("artprop"),
 		"\n<form method='post' action='",
-		generer_action_auteur("instituer", "article-$id_article-prop", generer_url_ecrire('articles', "id_article=$id_article", true)),
+		redirige_action_auteur("instituer", "article-$id_article-prop", 'articles', "id_article=$id_article"),
       "'>",
 		"<input type='submit' class='fondo' value=\"", 
 		_T('bouton_demande_publication'),
@@ -1275,7 +1275,7 @@ function afficher_statut_articles($id_article, $rubrique_article, $statut_articl
   if ($connect_statut == '0minirezo' AND acces_rubrique($rubrique_article)) {
   	
     echo "\n<form method='post' action='",
-      generer_action_auteur("instituer", "article-$id_article", generer_url_ecrire('articles', "id_article=$id_article", true)),
+      redirige_action_auteur("instituer", "article-$id_article",'articles', "id_article=$id_article"),
       "'>",
 	  debut_cadre_relief("", true),
       "\n<center>", "<B>",_T('texte_article_statut'),"</B>",
diff --git a/ecrire/exec/breves_voir.php b/ecrire/exec/breves_voir.php
index 161f4a247c..426953d3d0 100644
--- a/ecrire/exec/breves_voir.php
+++ b/ecrire/exec/breves_voir.php
@@ -193,15 +193,13 @@ if ($connect_statut=="0minirezo" AND acces_rubrique($id_rubrique) AND ($statut==
 	echo "<table>";
 	echo "<td  align='right'>";
 	icone(_T('icone_publier_breve'), 
-	      generer_action_auteur('instituer', "breve-$id_breve-publie",
-				    generer_url_ecrire("breves_voir","id_breve=$id_breve", true)), "breve-24.gif", "racine-24.gif");
+	      redirige_action_auteur('instituer', "breve-$id_breve-publie","breves_voir","id_breve=$id_breve"), "breve-24.gif", "racine-24.gif");
 	echo "</td>";
 	
 	echo "<td>", http_img_pack("rien.gif", ' ', "width='5'") ."</td>\n";
 	echo "<td  align='right'>";
 	icone(_T('icone_refuser_breve'), 
-	      generer_action_auteur('instituer', "breve-$id_breve-refuse",
-				    generer_url_ecrire("breves_voir","id_breve=$id_breve", true)), "breve-24.gif", "supprimer.gif");
+	      redirige_action_auteur('instituer', "breve-$id_breve-refuse", "breves_voir","id_breve=$id_breve"), "breve-24.gif", "supprimer.gif");
 	echo "</td>";
 	echo "</table>";	
 
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index beefb8b808..98a77b66e4 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -255,7 +255,7 @@ if ($id_rubrique>0 AND $GLOBALS['meta']['multi_rubriques'] == 'oui' AND ($GLOBAL
 
 	echo debut_block_invisible('languesrubrique');
 	echo "<div class='verdana2' align='center'>";
-	echo menu_langues('changer_lang', $langue_rubrique, '', $langue_parent, generer_action_auteur('instituer', "langue-$id_rubrique-$id_parent", generer_url_ecrire("naviguer","id_rubrique=$id_rubrique", true)), $ze_logo, "supprimer.gif");
+	echo menu_langues('changer_lang', $langue_rubrique, '', $langue_parent, redirige_action_auteur('instituer', "langue-$id_rubrique-$id_parent","naviguer","id_rubrique=$id_rubrique"), $ze_logo, "supprimer.gif");
 	echo "</div>\n";
 	echo fin_block();
 
@@ -463,7 +463,7 @@ function bouton_supprimer_naviguer($id_rubrique, $id_parent, $ze_logo, $flag_edi
 	if (($id_rubrique>0) AND tester_rubrique_vide($id_rubrique) AND $flag_editable) {
 
 		echo "<p><div align='center'>";
-		icone(_T('icone_supprimer_rubrique'), generer_action_auteur('supprimer', "rubrique-$id_rubrique", generer_url_ecrire("naviguer","id_rubrique=$id_parent", true)), $ze_logo, "supprimer.gif");
+		icone(_T('icone_supprimer_rubrique'), redirige_action_auteur('supprimer', "rubrique-$id_rubrique", "naviguer","id_rubrique=$id_parent"), $ze_logo, "supprimer.gif");
 		echo "</div><p>";
 	}
 }
diff --git a/ecrire/inc/auteur_voir.php b/ecrire/inc/auteur_voir.php
index 61f6a57254..1b45371c7e 100644
--- a/ecrire/inc/auteur_voir.php
+++ b/ecrire/inc/auteur_voir.php
@@ -111,10 +111,13 @@ function auteur_voir_rubriques($id_auteur, $url_self)
 	if (!$restreint) {
 		echo _T('info_admin_gere_toutes_rubriques');
 	} else {
-		$modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur);
-		$redirect = generer_url_ecrire($url_self, "id_auteur=$id_auteur", true); 
-		echo _T('info_admin_gere_rubriques');
-		echo "\n<ul style='list-style-image: url(" . _DIR_IMG_PACK . "rubrique-12.gif)'>";
+		$modif = ($connect_toutes_rubriques AND $connect_id_auteur != $id_auteur) ? "id_auteur=$id_auteur" : '';
+
+		echo _T('info_admin_gere_rubriques'),
+			"\n<ul style='list-style-image: url(",
+			_DIR_IMG_PACK,
+			"rubrique-12.gif)'>";
+
 		while ($row_admin = spip_fetch_array($result_admin)) {
 			$id_rubrique = $row_admin["id_rubrique"];
 			
@@ -123,7 +126,7 @@ function auteur_voir_rubriques($id_auteur, $url_self)
 			  "</a>";
 			
 			if ($modif) {
-			  echo "&nbsp;&nbsp;&nbsp;&nbsp;<font size='1'>[<a href='", generer_action_auteur('supprimer', "auteur_rubrique-$id_auteur-$id_rubrique", $redirect), "'>",
+			  echo "&nbsp;&nbsp;&nbsp;&nbsp;<font size='1'>[<a href='", redirige_action_auteur('supprimer', "auteur_rubrique-$id_auteur-$id_rubrique", $url_self, $modif), "'>",
 					    _T('lien_supprimer_rubrique'),
 					    "</a>]</font>";
 			}
diff --git a/ecrire/inc/config.php b/ecrire/inc/config.php
index 24dc7350f4..cf851d1c9a 100644
--- a/ecrire/inc/config.php
+++ b/ecrire/inc/config.php
@@ -300,8 +300,7 @@ function appliquer_modifs_config() {
 	}
 
 	if ($purger_skel)
-		redirige_par_entete(generer_action_auteur('purger', 'squelettes',
-			_DIR_RESTREINT_ABS . self(), true));
+		redirige_par_entete(generer_action_auteur('purger', 'squelettes', _DIR_RESTREINT_ABS . self(), true));
 
 }
 
diff --git a/ecrire/inc/documents.php b/ecrire/inc/documents.php
index 1b657ff856..e573874291 100644
--- a/ecrire/inc/documents.php
+++ b/ecrire/inc/documents.php
@@ -904,14 +904,13 @@ function  afficher_rotateurs($album, $document, $type, $id_article, $id_document
 
 function bouton_tourner_document($id_article, $id, $album, $rot, $type)
 {
-	return generer_action_auteur('tourner', $id, generer_url_ecrire($GLOBALS['exec'], ("id_$type=$id_article&show_docs=$id"), true) . "#$album") .
+	return redirige_action_auteur('tourner', $id, $GLOBALS['exec'], "id_$type=$id_article&show_docs=$id#$album") .
 		"&amp;var_rot=$rot";
 }
 
 function bouton_supprime_document_et_vignette($id_article, $type, $id_v, $album, $id_document=0)
 {
-
-	return generer_action_auteur('supprimer', "document-$id_v", generer_url_ecrire($GLOBALS['exec'], ("id_$type=$id_article"), true) . "#$album");
+	return redirige_action_auteur('supprimer', "document-$id_v", $GLOBALS['exec'], "id_$type=$id_article#$album");
 
 
 }
diff --git a/ecrire/inc/forum.php b/ecrire/inc/forum.php
index 4451a78290..80eff67256 100644
--- a/ecrire/inc/forum.php
+++ b/ecrire/inc/forum.php
@@ -84,19 +84,20 @@ function boutons_controle_forum($id_forum, $forum_stat, $forum_id_auteur=0, $ref
 			return;
 	}
 
-	$lien = _DIR_RESTREINT_ABS . str_replace('&amp;', '&', self()) . "#id$id_forum";
+	$lien = str_replace('&amp;', '&', self()) . "#id$id_forum";
 	if ($supprimer)
-	  $controle .= icone(_T('icone_supprimer_message'), generer_action_auteur('instituer', "forum-$id_forum $supprimer", $lien),
+	  $controle .= icone(_T('icone_supprimer_message'), generer_action_auteur('instituer', "forum-$id_forum-$supprimer", _DIR_RESTREINT_ABS . $lien),
 			$logo,
 			"supprimer.gif", 'right', 'non');
 
 	if ($valider)
-		$controle .= icone(_T('icone_valider_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", $lien),
+		$controle .= icone(_T('icone_valider_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", _DIR_RESTREINT_ABS . $lien),
 			$logo,
 			"creer.gif", 'right', 'non');
 
 	if ($valider_repondre) {
-	  $controle .= icone(_T('icone_valider_message') . " &amp; " .   _T('lien_repondre_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", generer_url_public('forum', "$ref&id_forum=$id_forum&retour=" . rawurlencode($lien), true)),
+	  $dblret =  rawurlencode(_DIR_RESTREINT_ABS . $lien);
+	  $controle .= icone(_T('icone_valider_message') . " &amp; " .   _T('lien_repondre_message'), generer_action_auteur('instituer', "forum-$id_forum-$valider", generer_url_public('forum', "$ref&id_forum=$id_forum&retour=$dblret", true)),
 			     $logo,
 			     "creer.gif", 'right', 'non');
 	}
diff --git a/ecrire/inc/logos.php b/ecrire/inc/logos.php
index 24e9ed016d..8d01ae0df7 100644
--- a/ecrire/inc/logos.php
+++ b/ecrire/inc/logos.php
@@ -68,7 +68,7 @@ function decrire_logo($id_objet, $mode, $id, $width, $height, $titre="", $script
 		"<font size='1'>" .
 		$xy .
 		"\n<br />[<a href='" .
-		generer_action_auteur("iconifier", "unlink $nom.$format", generer_url_ecrire($script, "$id_objet=$id", true)) .
+		redirige_action_auteur("iconifier", "unlink $nom.$format", $script, "$id_objet=$id") .
 		"'>".
 		_T('lien_supprimer') .
 		"</a>]</font>" .
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index f79c22b46f..9ba3d74bdd 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -2851,8 +2851,9 @@ function fin_page($credits='') {
 }
 
 function debloquer_article($arg, $texte) {
-	$lien = _DIR_RESTREINT_ABS . parametre_url(self(), 'debloquer_article', $arg, '&');
-	return "<a href='" . generer_action_auteur('instituer', "collaboration-$arg", $lien) .
+	$lien = parametre_url(self(), 'debloquer_article', $arg, '&');
+	return "<a href='" .
+	  generer_action_auteur('instituer', "collaboration-$arg", _DIR_RESTREINT_ABS . $lien) .
 	  "' title=\"" .
 	  entites_html($texte) .
 	  "\">$texte&nbsp;" .
diff --git a/ecrire/inc/session.php b/ecrire/inc/session.php
index 61b601486a..98e2e81b50 100644
--- a/ecrire/inc/session.php
+++ b/ecrire/inc/session.php
@@ -293,6 +293,11 @@ function generer_action_auteur($action, $arg, $redirect="", $no_entites=false)
 	return generer_url_action($action, "arg=$arg&id_auteur=$connect_id_auteur&hash=$hash$redirect", $no_entites);
 }
 
+function redirige_action_auteur($action, $arg, $ret, $gra)
+{
+	return generer_action_auteur($action, $arg, generer_url_ecrire($ret, $gra, true, _DIR_RESTREINT_ABS));
+}
+
 function determine_upload()
 {
 	global $connect_toutes_rubriques, $connect_login, $connect_statut ;
diff --git a/ecrire/inc/sites_voir.php b/ecrire/inc/sites_voir.php
index 1eafcf671d..347c292490 100644
--- a/ecrire/inc/sites_voir.php
+++ b/ecrire/inc/sites_voir.php
@@ -110,7 +110,7 @@ function afficher_syndic_articles($titre_table, $requete, $id = 0) {
 	$col = (($connect_statut == '0minirezo') ? 3 :  2) + ($id==0);
 	$tmp_var = substr(md5(join(' ',$requete)), 0, 4);
 	$deb_aff = intval(_request('t_' .$tmp_var));
-	$redirect = generer_url_ecrire($GLOBALS['exec'], ('t_' .$tmp_var . '=' . $deb_aff) . (!$id ? '' : "&id_syndic=$id"), true);
+	$redirect = ('t_' .$tmp_var . '=' . $deb_aff) . (!$id ? '' : "&id_syndic=$id");
 	if (!$requete['FROM']) $requete['FROM']= 'spip_syndic_articles';
 
 	if (!$id) {
@@ -208,11 +208,11 @@ function afficher_syndic_articles_boucle($row, &$my_sites, $bof, $redirect)
 				
 	if ($connect_statut == '0minirezo'){
 		if ($statut == "publie"){
-		  $s =  "[<a href='". generer_action_auteur("instituer", "syndic_article-$id_syndic_article-refuse", $redirect) . "'><font color='black'>"._T('info_bloquer_lien')."</font></a>]";
+			$s =  "[<a href='". redirige_action_auteur("instituer", "syndic_article-$id_syndic_article-refuse", $GLOBALS['exec'], $redirect) . "'><font color='black'>"._T('info_bloquer_lien')."</font></a>]";
 		
 		}
 		else if ($statut == "refuse"){
-			$s =  "[<a href='". generer_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $redirect) . "'>"._T('info_retablir_lien')."</a>]";
+			$s =  "[<a href='". redirige_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_retablir_lien')."</a>]";
 		}
 		else if ($statut == "off"
 		AND $my_sites[$id_syndic]['miroir'] == 'oui') {
@@ -220,7 +220,7 @@ function afficher_syndic_articles_boucle($row, &$my_sites, $bof, $redirect)
 		}
 		else /* 'dispo' ou 'off' (dans le cas ancien site 'miroir') */
 		{
-			$s = "[<a href='". generer_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $redirect) . "'>"._T('info_valider_lien')."</a>]";
+			$s = "[<a href='". redirige_action_auteur("instituer", "syndic_article-$id_syndic_article-publie", $GLOBALS['exec'], $redirect) . "'>"._T('info_valider_lien')."</a>]";
 		}
 		$vals[] = $s;
 	}
diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index f4a6ec21c1..af68ca80a9 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -722,7 +722,7 @@ function url_de_base() {
 function generer_url_ecrire($script, $args="", $no_entities=false, $rel=false) {
 	if (!$rel)
 		$rel = url_de_base() . _DIR_RESTREINT_ABS;
-	else
+	else if (!is_string($rel))
 		$rel = _DIR_RESTREINT ? _DIR_RESTREINT : './';
 
 	if ($script AND $script<>'accueil') 
-- 
GitLab