]> source.dussan.org Git - nextcloud-server.git/commitdiff
Removing trailing dot in path that samba doesn't seem to like
authorVincent Petry <pvince81@owncloud.com>
Thu, 14 Nov 2013 15:52:00 +0000 (16:52 +0100)
committerVincent Petry <pvince81@owncloud.com>
Fri, 15 Nov 2013 15:35:12 +0000 (16:35 +0100)
Fixes #5778
Added unit test for getId() and constructUrl()

Backport of f66ec8a02271e73755cb965107eca60f027ffe78

apps/files_external/lib/smb.php
apps/files_external/tests/smbfunctions.php [new file with mode: 0644]

index fede9fe392ff8b2968e662b28ebd12b797275156..0168fa38700033881a9662d313ce75394e183219 100644 (file)
@@ -47,8 +47,13 @@ class SMB extends \OC\Files\Storage\StreamWrapper{
 
        public function constructUrl($path) {
                if (substr($path, -1)=='/') {
-                       $path=substr($path, 0, -1);
+                       $path = substr($path, 0, -1);
                }
+               if (substr($path, 0, 1)=='/') {
+                       $path = substr($path, 1);
+               }
+               // remove trailing dots which some versions of samba don't seem to like
+               $path = rtrim($path, '.');
                $path = urlencode($path);
                $user = urlencode($this->user);
                $pass = urlencode($this->password);
diff --git a/apps/files_external/tests/smbfunctions.php b/apps/files_external/tests/smbfunctions.php
new file mode 100644 (file)
index 0000000..749906d
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright (c) 2013 Vincent Petry <pvince81@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Storage;
+
+class SMBFunctions extends \PHPUnit_Framework_TestCase {
+
+       public function setUp() {
+               $id = uniqid();
+               // dummy config
+               $this->config = array(
+                       'run'=>false,
+                       'user'=>'test',
+                       'password'=>'testpassword',
+                       'host'=>'smbhost',
+                       'share'=>'/sharename',
+                       'root'=>'/rootdir/',
+               );
+
+               $this->instance = new \OC\Files\Storage\SMB($this->config);
+       }
+
+       public function tearDown() {
+       }
+
+       public function testGetId() {
+               $this->assertEquals('smb::test@smbhost//sharename//rootdir/', $this->instance->getId());
+       }
+
+       public function testConstructUrl() {
+               $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc", $this->instance->constructUrl('/abc'));
+               $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc", $this->instance->constructUrl('/abc/'));
+               $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc%2F", $this->instance->constructUrl('/abc/.'));
+               $this->assertEquals("smb://test:testpassword@smbhost/sharename/rootdir/abc%2Fdef", $this->instance->constructUrl('/abc/def'));
+       }
+}