From 719c7f7f6ebfe53a73eeffb07c6c23d6a788e711 Mon Sep 17 00:00:00 2001
From: Michael Gapczynski <mtgap@owncloud.com>
Date: Fri, 29 Jun 2012 13:00:41 -0400
Subject: [PATCH] Fix WebDAV external storage opendir() and stat() for
 directories, bug fix for oc-1160

---
 apps/files_external/lib/webdav.php | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/apps/files_external/lib/webdav.php b/apps/files_external/lib/webdav.php
index 94d9abb6a2..d0fe2aca85 100644
--- a/apps/files_external/lib/webdav.php
+++ b/apps/files_external/lib/webdav.php
@@ -73,13 +73,15 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
 			$stripLength=strlen($this->root)+strlen($path);
 			$id=md5('webdav'.$this->root.$path);
 			OC_FakeDirStream::$dirs[$id]=array();
+			$skip = true;
 			foreach($response as $file=>$data){
-				//strip root and path
-				$file=trim(substr($file,$stripLength));
-				$file=trim($file,'/');
-				if($file){
-					OC_FakeDirStream::$dirs[$id][]=$file;
+				// Skip the first file, because it is the current directory
+				if ($skip) {
+					$skip = false;
+					continue;
 				}
+				$file = urldecode(basename($file));
+				OC_FakeDirStream::$dirs[$id][]=$file;
 			}
 			return opendir('fakedir://'.$id);
 		}catch(Exception $e){
@@ -244,15 +246,11 @@ class OC_FileStorage_DAV extends OC_Filestorage_Common{
 		$path=$this->cleanPath($path);
 		try{
 			$response=$this->client->propfind($path, array('{DAV:}getlastmodified','{DAV:}getcontentlength'));
-			if(isset($response['{DAV:}getlastmodified']) and isset($response['{DAV:}getcontentlength'])){
-				return array(
-					'mtime'=>strtotime($response['{DAV:}getlastmodified']),
-					'size'=>(int)$response['{DAV:}getcontentlength'],
-					'ctime'=>-1,
-				);
-			}else{
-				return array();
-			}
+			return array(
+				'mtime'=>strtotime($response['{DAV:}getlastmodified']),
+				'size'=>(int)isset($response['{DAV:}getcontentlength']) ? $response['{DAV:}getcontentlength'] : 0,
+				'ctime'=>-1,
+			);
 		}catch(Exception $e){
 			return array();
 		}
-- 
GitLab