From 2a5ee9512ee88da53dcba862a32279bdc7096bfb Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind1991@gmail.com>
Date: Sun, 12 Jun 2011 00:57:43 +0200
Subject: [PATCH] allow tear down of filesystem.

also fix a bug when chrooting to '/'
---
 lib/base.php       |  7 ++++++-
 lib/filesystem.php | 16 ++++++++++++++--
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/lib/base.php b/lib/base.php
index a3ffb6b1a6..50c41dc085 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -145,7 +145,7 @@ class OC_UTIL {
 
 		if( $user != "" ){ //if we aren't logged in, there is no use to set up the filesystem
 			//first set up the local "root" storage and the backupstorage if needed
-			$rootStorage=OC_FILESYSTEM::createStorage('local',array('datadir'=>$CONFIG_DATADIRECTORY));
+			$rootStorage=OC_FILESYSTEM::createStorage('local',array('datadir'=>$CONFIG_DATADIRECTORY_ROOT));
 // 			if( OC_CONFIG::getValue( "enablebackup", false )){
 // 				// This creates the Directorys recursively
 // 				if(!is_dir( "$CONFIG_BACKUPDIRECTORY/$user/$root" )){
@@ -182,6 +182,11 @@ class OC_UTIL {
 		}
 	}
 
+	public static function tearDownFS(){
+		OC_FILESYSTEM::tearDown();
+		self::$fsSetup=false;
+	}
+
 	/**
 	 * get the current installed version of ownCloud
 	 * @return array
diff --git a/lib/filesystem.php b/lib/filesystem.php
index 2b5c3a56b6..27a937f5e4 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -67,6 +67,16 @@ class OC_FILESYSTEM{
 		return array_keys(self::$storageTypes);
 	}
 	
+	/**
+	 * tear down the filesystem, removing all storage providers
+	 */
+	static public function tearDown(){
+		foreach(self::$storages as $mountpoint=>$storage){
+			unset(self::$storages[$mountpoint]);
+		}
+		$fakeRoot='';
+	}
+	
 	/**
 	* create a new storage of a specific type
 	* @param  string  type
@@ -91,8 +101,10 @@ class OC_FILESYSTEM{
 	* @return bool
 	*/
 	static public function chroot($fakeRoot){
-		if($fakeRoot[0]!=='/'){
-			$fakeRoot='/'.$fakeRoot;
+		if(!$fakeRoot==''){
+			if($fakeRoot[0]!=='/'){
+				$fakeRoot='/'.$fakeRoot;
+			}
 		}
 		self::$fakeRoot=$fakeRoot;
 	}
-- 
GitLab