WebDAV folder sync iOS Readdle Documents 6 issue

You are right, I can confirm the davfs2 mount issue with this installation. PVince81's DAV CORS workaround fixed the davfs2 mount issue, but unfortunately not the iPad issue.

Could you provide that information in the github? Would appreciate it.

I'm sorry, this is my first report here... do I report an issue at https://github.com/owncloud/core/issues ?

Just adding it to this issue should work for now. The PR is in discussion.

@christianh can you try disabling the CORS plugin completely like described here https://github.com/owncloud/core/issues/29793#issuecomment-350309630 ?

If the problem persists then maybe it's a different issue... (I don't have an ios device so can't test)

I tried that, looks like it is a different issue. Sorry. If you have something that I can test with iOS devices just let me know. Happy to do that.

I am running into the exact same issue here.

To track the issue down I created the following folder structure:

testingfolder (directory)
|- testingfile.txt (empty file)
|- testingfolder2 (directory)
     |- testingfile2.txt (empty file)

After that, I sniffed the communication between the iOS client/Readdle Documents.

When syncing testingfolder:

OPTIONS /owncloud/remote.php/webdav HTTP/1.1
Host: owncloud.prdom
Accept-Encoding: gzip, deflate
Content-Length: 0
Connection: keep-alive
Accept: */*
User-Agent: ReaddleDAV Documents/6.2.7.416 (redirects)
Authorization: Basic hello=
Accept-Language: de-de
X-Device-Name: pr's iPhone8

HTTP/1.1 200 OK
Date: Mon, 01 Jan 2018 12:19:10 GMT
Server: Apache/2.4.25 (Debian)
Set-Cookie: oc63oltz1bjb=0u89dviamn7cfvi454id4bgim6; path=/owncloud; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: oc_sessionPassphrase=hello; path=/owncloud; httponly
Content-Security-Policy: default-src 'none';
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Robots-Tag: none
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Set-Cookie: hello; path=/owncloud; HttpOnly
Set-Cookie: cookie_test=test; expires=Mon, 01-Jan-2018 13:19:10 GMT; Max-Age=3600
Allow: OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT
DAV: 1, 3, extended-mkcol
MS-Author-Via: DAV
Accept-Ranges: bytes
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

PROPFIND /owncloud/remote.php/webdav/ HTTP/1.1
Host: owncloud.prdom
Accept: */*
Authorization: Basic hello=
X-Device-Name: pr's iPhone8
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 212
Depth: 1
Connection: keep-alive
User-Agent: ReaddleDAV Documents/6.2.7.416 (redirects)
Cookie: cookie_test=test; hello; oc_sessionPassphrase=hello

<?xml version="1.0" encoding="utf-8"?>    <propfind xmlns="DAV:"><prop><getcontentlength xmlns="DAV:"/>    <getlastmodified xmlns="DAV:"/><creationdate xmlns="DAV:"/><resourcetype xmlns="DAV:"/></prop></propfind>HTTP/1.1 207 Multi-Status
Date: Mon, 01 Jan 2018 12:19:10 GMT
Server: Apache/2.4.25 (Debian)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Security-Policy: default-src 'none';
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Robots-Tag: none
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Vary: Brief,Prefer
DAV: 1, 3, extended-mkcol
Content-Length: 3685
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: application/xml; charset=utf-8

<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"><d:response><d:href>/owncloud/remote.php/webdav/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/Actions/</d:href><d:propstat><d:prop><d:getlastmodified>Sun, 31 Dec 2017 07:05:05 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/Documents/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 25 Dec 2017 13:16:11 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/Media/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 03:58:48 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/Notes/</d:href><d:propstat><d:prop><d:getlastmodified>Fri, 01 Jul 2016 19:34:08 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/Photos/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 03:20:23 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/Profiles/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 13 Nov 2017 07:48:06 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/Reader/</d:href><d:propstat><d:prop><d:getlastmodified>Thu, 28 Dec 2017 16:44:08 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response></d:multistatus>PROPFIND /owncloud/remote.php/webdav/testingfolder/ HTTP/1.1
Host: owncloud.prdom
Accept: */*
Authorization: Basic hello=
X-Device-Name: pr's iPhone8
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 212
Depth: infinity
Connection: keep-alive
User-Agent: ReaddleDAV Documents/6.2.7.416 (redirects)
Cookie: cookie_test=test; hello; oc_sessionPassphrase=hello

<?xml version="1.0" encoding="utf-8"?>    <propfind xmlns="DAV:"><prop><getcontentlength xmlns="DAV:"/>    <getlastmodified xmlns="DAV:"/><creationdate xmlns="DAV:"/><resourcetype xmlns="DAV:"/></prop></propfind>HTTP/1.1 207 Multi-Status
Date: Mon, 01 Jan 2018 12:19:10 GMT
Server: Apache/2.4.25 (Debian)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Security-Policy: default-src 'none';
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Robots-Tag: none
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Vary: Brief,Prefer
DAV: 1, 3, extended-mkcol
Content-Length: 1811
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Content-Type: application/xml; charset=utf-8

<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/testingfile.txt</d:href><d:propstat><d:prop><d:getcontentlength>0</d:getcontentlength><d:getlastmodified>Mon, 01 Jan 2018 12:16:43 GMT</d:getlastmodified><d:resourcetype/></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/testingfolder2/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/testingfolder2/testingfile2.txt</d:href><d:propstat><d:prop><d:getcontentlength>0</d:getcontentlength><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response></d:multistatus>

The interesting part should be:

	<d:response>
		<d:href>/owncloud/remote.php/webdav/testingfolder/testingfolder2/testingfile2.txt</d:href>
		<d:propstat>
			<d:prop>
				<d:getcontentlength>0</d:getcontentlength>
				<d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified>
				<d:resourcetype>
					<d:collection />
				</d:resourcetype>
			</d:prop>
			<d:status>HTTP/1.1 200 OK</d:status>
		</d:propstat>
        [...]
	</d:response>

From my understanding - it's really hard to find the right spot in the rfc without extensive time - d:resourcetype should be empty for regular files.

When only browsing the folder structure in Documents without syncing all file types are displayed correctly:

PROPFIND /owncloud/remote.php/webdav/testingfolder/ HTTP/1.1
Host: owncloud.prdom
Accept: */*
Authorization: Basic hello=
X-Device-Name: pr's iPhone8
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 212
Depth: 1
Connection: keep-alive
User-Agent: ReaddleDAV Documents/6.2.7.416 (redirects)
Cookie: cookie_test=test; hello; oc_sessionPassphrase=hello

<?xml version="1.0" encoding="utf-8"?>    <propfind xmlns="DAV:"><prop><getcontentlength xmlns="DAV:"/>    <getlastmodified xmlns="DAV:"/><creationdate xmlns="DAV:"/><resourcetype xmlns="DAV:"/></prop></propfind>HTTP/1.1 207 Multi-Status
Date: Mon, 01 Jan 2018 12:33:21 GMT
Server: Apache/2.4.25 (Debian)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Security-Policy: default-src 'none';
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Robots-Tag: none
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Vary: Brief,Prefer
DAV: 1, 3, extended-mkcol
Content-Length: 1358
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/xml; charset=utf-8

<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/testingfile.txt</d:href><d:propstat><d:prop><d:getcontentlength>0</d:getcontentlength><d:getlastmodified>Mon, 01 Jan 2018 12:16:43 GMT</d:getlastmodified><d:resourcetype/></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/testingfolder2/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response></d:multistatus>PROPFIND /owncloud/remote.php/webdav/testingfolder/testingfolder2/ HTTP/1.1
Host: owncloud.prdom
Accept: */*
Authorization: Basic hello=
X-Device-Name: pr's iPhone8
Accept-Language: de-de
Accept-Encoding: gzip, deflate
Content-Type: application/xml
Content-Length: 212
Depth: 1
Connection: keep-alive
User-Agent: ReaddleDAV Documents/6.2.7.416 (redirects)
Cookie: cookie_test=test; hello; oc_sessionPassphrase=hello

<?xml version="1.0" encoding="utf-8"?>    <propfind xmlns="DAV:"><prop><getcontentlength xmlns="DAV:"/>    <getlastmodified xmlns="DAV:"/><creationdate xmlns="DAV:"/><resourcetype xmlns="DAV:"/></prop></propfind>HTTP/1.1 207 Multi-Status
Date: Mon, 01 Jan 2018 12:33:22 GMT
Server: Apache/2.4.25 (Debian)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Security-Policy: default-src 'none';
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-Robots-Tag: none
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Vary: Brief,Prefer
DAV: 1, 3, extended-mkcol
Content-Length: 973
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: application/xml; charset=utf-8

<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:oc="http://owncloud.org/ns"><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/testingfolder2/</d:href><d:propstat><d:prop><d:getlastmodified>Mon, 01 Jan 2018 12:17:01 GMT</d:getlastmodified><d:resourcetype><d:collection/></d:resourcetype></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/owncloud/remote.php/webdav/testingfolder/testingfolder2/testingfile2.txt</d:href><d:propstat><d:prop><d:getcontentlength>0</d:getcontentlength><d:getlastmodified>Mon, 01 Jan 2018 12:16:52 GMT</d:getlastmodified><d:resourcetype/></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response></d:multistatus>

Relevant part:

    <d:response>
		<d:href>/owncloud/remote.php/webdav/testingfolder/testingfolder2/testingfile2.txt</d:href>
		<d:propstat>
			<d:prop>
				<d:getcontentlength>0</d:getcontentlength>
				<d:getlastmodified>Mon, 01 Jan 2018 12:16:52 GMT</d:getlastmodified>
				<d:resourcetype />
			</d:prop>
			<d:status>HTTP/1.1 200 OK</d:status>
		</d:propstat>
		[...]
	</d:response>

I hope, this helps to track down the problem.

Patrick

Any news about the issue?

I must admit that I'm a little bit concerned about the silence...

Patrick

Just in case anyone else is in strong need of a working WebDAV implementation: Migrating to Nextcloud worked like a charme and solved the issue.

Hello,

i have the same problem with the subfolder-sync.

Any news about the issue?

Michael

This issue just became a real problem. The Desktop Client 2.5.0 now flags all server versions below 10.0 as not supported and automatically pauses synchronization. However, 10.0.10 still has not fixed the WebDAV bug. So now we are forced to choose: have desktop sync or iOS sync.

Hi,

we would like to fix this issue.

But, the first step is to reproduce this issue.

Can you tell me the following information?

What version of ownCloud server are you on right now?

If it’s not 10.0.10 ( the latest ) have you tried upgrading and checking if the issue persists?

What client version are you using?

What sync client version?

You mention an app “Readdle Documents 6” is this a document editor? Have you tried Microsoft Office?

What are the steps to reproduce for this issue?

The steps from you original post are to vague. We need precise steps.

You also mention that you are on iOS 11, have you updated to 12?

Hi Dmitry,

Thank you, that was quick! See https://github.com/owncloud/core/issues/32935 for details.

Yeah, that does not answer any of my questions.

ownCloud 10.0.10 (stable)

Readdle Documents 6.6.1.562

Desktop Client Version 2.5.0 (build 10213).

No.

  1. Create this folder structure anywhere in the user’s files with two image files:
    MyDocs/
      image1.jpg
      sub/
        image2.jpg
  1. Open Documents on the iOS device, log in, browse to the folder MyDocs.
  2. Sync the folder.
  3. Open the synced folder.

No. Do you think this is an iOS issue? My thought was that this could point to a WebDAV implementation issue, since it came up with the Server 10.0 version. I have tried multiple combinations of iOS versions, Documents versions, and owncloud server versions. It happens with server >10 and any client combination I had.

Okay, I just tried it.

I installed the Readdle Documents on my iPad which has iOS 12, connected to a 10.0.10 ownCloud and was able to browse in sub folders. Sub folders were folders an not just file names.

I suspect a different issue.

I think you are trying to edit documents on your iOS Device, and save them in ownCloud and expect it to sync properly. This does not work because ownClouds iOS app has no “Files” integration as for now. The new ownCloud iOS app should have that, but this on has not.

If that’s not your issue then let’s debug further together.

  1. log in where? in the ownCloud app? in the web UI?
  2. sync the folder where? with what?

Edit:

My second test

on the iPAD:

Go in the Readdle Documents app
Go in to the ownCloud directory connected via WebDav
Go in a subfolder, go in to the subfolder of the subfolder.
Edit a Text Document there, wait for the changes to be synced.
Go in the root dir and in the subfolders again. Everything works and I can see the folders and the changes in my document.

That is correct, you can browse the files with no problem. Try syncing the folder: Click the three dots, then Sync.

Open Readdle Documents. Go to Services, Add Account, WebDAV Server. Enter your owncloud WebDAV credentials and URL.

Go to your newly created Services entry. Navigate so you can see the MyDocs folder. Click its three dots, then Sync. Go to the Documents tab. Open your synced folder once it has a green checkmark.

Edit: I am happy to dig deeper into logs or generate more detailed logs. Just let me know what can help. Thanks for your support, dmitry!

Uhh, now I see every file as a folder.

Every file in a sub directory that is.

Edit:

Quick question: why don’t you use the ownCloud iOS app?

Found workaround.

You can not choose the root folder as a Sync Folder.

Chose the sub dir as sync folder and viola your files are there.

Sorry for openning old thread, but this workaround only works if there is no subfolders in sub dir you selected to be synced.
As soon as I create a sub folder inside the synced dir and put any files there after resync the become shown as folders.