From 1fb8932e70e51c02374b10f25b50d0096fc9d1fa Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Fri, 8 Oct 2004 13:22:01 +0000
Subject: [PATCH] =?UTF-8?q?s=C3=A9curisation=20des=20sous-r=C3=A9pertoires?=
 =?UTF-8?q?=20pour=20documents=20joints?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 donne_l_ode.php3 | 75 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100644 donne_l_ode.php3

diff --git a/donne_l_ode.php3 b/donne_l_ode.php3
new file mode 100644
index 0000000000..90e80700c1
--- /dev/null
+++ b/donne_l_ode.php3
@@ -0,0 +1,75 @@
+<?
+# script d'acces aux documents joints
+# doit etre appele avec un de ces 2 parametres de GET:
+# - id_document 
+# - file 
+# il verifie soit que le demandeur est authentifie
+# soit que le fichier est joint à au moins 1 article, breve ou rubrique
+
+$id_document = ($_GET['id_document']);
+$file = urldecode($_GET['file']);
+if (strpos($file,'../') !== false)
+  $refus = 1;
+else
+  {
+    $refus = false;
+    include ("ecrire/inc_version.php3");
+    include ("ecrire/inc_connect.php3");
+    include ("ecrire/inc_meta.php3");
+    include ("ecrire/inc_session.php3");
+
+    global $auteur_session;
+    if ($cookie_session = $HTTP_COOKIE_VARS['spip_session']) 
+      {
+	if (verifier_session($cookie_session)) 
+	  {
+	    if ($auteur_session['statut'] == '0minirezo' 
+		OR $auteur_session['statut'] == '1comite') 
+	      $auth_login = $auteur_session['login'];
+	  }
+      }
+
+    if (!$id_document) {
+      $id_document = @spip_fetch_array(spip_query("select id_document from spip_documents as documents where documents.fichier='".$file."'"));
+      if (!$id_document) $refus = 2;
+      $id_document = $id_document['id_document'];
+    } else {
+      $file = @spip_fetch_array(spip_query("select fichier from spip_documents as documents where id_document='". $id_document ."'"));
+      if (!$file) $refus = 3;
+      $file = $file['fichier'];
+    }
+  }
+
+if (!$auth_login && !$refus) { 
+    if (!spip_num_rows(spip_query("select articles.id_article
+from spip_documents_articles as rel_articles, spip_articles as articles 
+where rel_articles.id_article = articles.id_article AND
+articles.statut = 'publie' AND rel_articles.id_document ='".
+			       $id_document .
+				"' LIMIT 1"))) {
+      if (!spip_num_rows(spip_query("select rubriques.id_rubrique
+from spip_documents_rubriques as rel_rubriques, spip_rubriques as rubriques 
+where rel_rubriques.id_rubrique = rubriques.id_rubrique AND
+rubriques.statut = 'publie' AND rel_rubriques.id_document ='".
+			       $id_document .
+				  "' LIMIT 1"))) {
+	if (!spip_num_rows(spip_query("select breves.id_breve
+from spip_documents_breves as rel_breves, spip_breves as breves 
+where rel_breves.id_breve = breves.id_breve AND
+breves.statut = 'publie' AND rel_breves.id_document ='".
+			       $id_document .
+				  "' LIMIT 1")))
+	  $refus = 4; } } }
+
+if (!$refus)
+  {
+     header("Content-Type: ". mime_content_type($file));
+     header("Content-Length: ". filesize($file));
+     header("Content-Disposition: attachment; filename=\"". basename($file) ."\";");
+     header("Content-Transfer-Encoding: binary");
+     readfile($file);
+   }
+ else
+   spip_log("Acces refuse ($refus) au document " . ($_GET['id_document']) . ': ' .($_GET['file']));
+
+?>
\ No newline at end of file
-- 
GitLab