From 0616eb4007b14d701ca3949c83bddf0a31507b56 Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Mon, 16 Jun 2014 15:57:01 +0200
Subject: [PATCH] Fix multiple users having the same external share mountpoint

---
 apps/files_sharing/appinfo/database.xml     |  4 ++++
 apps/files_sharing/appinfo/version          |  2 +-
 apps/files_sharing/lib/external/manager.php | 10 ++++++----
 3 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/apps/files_sharing/appinfo/database.xml b/apps/files_sharing/appinfo/database.xml
index 159d6cb1c5..73d64c527b 100644
--- a/apps/files_sharing/appinfo/database.xml
+++ b/apps/files_sharing/appinfo/database.xml
@@ -81,6 +81,10 @@
 			<index>
 				<name>sh_external_mp</name>
 				<unique>true</unique>
+				<field>
+					<name>user</name>
+					<sorting>ascending</sorting>
+				</field>
 				<field>
 					<name>mountpoint_hash</name>
 					<sorting>ascending</sorting>
diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version
index 4b9fcbec10..cb0c939a93 100644
--- a/apps/files_sharing/appinfo/version
+++ b/apps/files_sharing/appinfo/version
@@ -1 +1 @@
-0.5.1
+0.5.2
diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php
index 381651f8c6..70a0e98ebd 100644
--- a/apps/files_sharing/lib/external/manager.php
+++ b/apps/files_sharing/lib/external/manager.php
@@ -117,22 +117,24 @@ class Manager {
 	 * @return bool
 	 */
 	public function setMountPoint($source, $target) {
+		$user = $this->userSession->getUser();
 		$source = $this->stripPath($source);
 		$target = $this->stripPath($target);
 		$sourceHash = md5($source);
 		$targetHash = md5($target);
 
 		$query = $this->connection->prepare('UPDATE *PREFIX*share_external SET
-			`mountpoint` = ?, `mountpoint_hash` = ? WHERE `mountpoint_hash` = ?');
-		$result = (bool)$query->execute(array($target, $targetHash, $sourceHash));
+			`mountpoint` = ?, `mountpoint_hash` = ? WHERE `mountpoint_hash` = ? AND `user` = ?');
+		$result = (bool)$query->execute(array($target, $targetHash, $sourceHash, $user->getUID()));
 
 		return $result;
 	}
 
 	public function removeShare($mountPoint) {
+		$user = $this->userSession->getUser();
 		$mountPoint = $this->stripPath($mountPoint);
 		$hash = md5($mountPoint);
-		$query = $this->connection->prepare('DELETE FROM *PREFIX*share_external WHERE `mountpoint_hash` = ?');
-		return (bool)$query->execute(array($hash));
+		$query = $this->connection->prepare('DELETE FROM *PREFIX*share_external WHERE `mountpoint_hash` = ? AND `user` = ?');
+		return (bool)$query->execute(array($hash, $user->getUID()));
 	}
 }
-- 
GitLab