From 6f346b4b1f4512668e631ac57e71fac9061bc5fe Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 3 Jul 2015 19:49:25 +0200 Subject: [PATCH] Fix webdav destination header when overwriting folders The trailing slash is needed when talking to Apache's mod_dav server --- lib/private/Files/Storage/DAV.php | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/private/Files/Storage/DAV.php b/lib/private/Files/Storage/DAV.php index 04910ece68..4713eb86fc 100644 --- a/lib/private/Files/Storage/DAV.php +++ b/lib/private/Files/Storage/DAV.php @@ -506,13 +506,18 @@ class DAV extends Common { $path1 = $this->cleanPath($path1); $path2 = $this->cleanPath($path2); try { + // overwrite directory ? + if ($this->is_dir($path2)) { + // needs trailing slash in destination + $path2 = rtrim($path2, '/') . '/'; + } $this->client->request( 'MOVE', $this->encodePath($path1), null, - array( - 'Destination' => $this->createBaseUri() . $this->encodePath($path2) - ) + [ + 'Destination' => $this->createBaseUri() . $this->encodePath($path2), + ] ); $this->statCache->clear($path1 . '/'); $this->statCache->clear($path2 . '/'); @@ -530,10 +535,22 @@ class DAV extends Common { /** {@inheritdoc} */ public function copy($path1, $path2) { $this->init(); - $path1 = $this->encodePath($this->cleanPath($path1)); - $path2 = $this->createBaseUri() . $this->encodePath($this->cleanPath($path2)); + $path1 = $this->cleanPath($path1); + $path2 = $this->cleanPath($path2); try { - $this->client->request('COPY', $path1, null, array('Destination' => $path2)); + // overwrite directory ? + if ($this->is_dir($path2)) { + // needs trailing slash in destination + $path2 = rtrim($path2, '/') . '/'; + } + $this->client->request( + 'COPY', + $this->encodePath($path1), + null, + [ + 'Destination' => $this->createBaseUri() . $this->encodePath($path2), + ] + ); $this->statCache->clear($path2 . '/'); $this->statCache->set($path2, true); $this->removeCachedFile($path2);