[BUG] External storage 'SFTP' is shown multiple times
Actual behaviour
An exterrnal storage appears multiple times. Only the first entry works, all other entries are empty folders.
Expected behaviour
A storage should appear exactly once.
Steps to reproduce
Reproducable with a freshly installed server 10.13.3-rc.2 (and also 10.13.2 - not a regression):
- admin user creates an external storage "SFTP" avialable for all users.
- admin user creates the same external storage with same config again, this time named "SFTPalice"
- connect android client to the server (e.g. https://oc10133rc2-20231120.jw-qa.owncloud.works/)
- log in as user alice
- the toplevel folder list shows both, SFTP and SFTPalice, but SFTP is shown multiple times:
Extra inputs:
- it is also reproducable with 10.13.2 - so 10.13.3 is definitly innocent.
- the multiple entries of SFTP appear, as soon as the same external storage is mounted a second time with a new name.
- the issue only happens, when exactly the same path is used in both configs. If one is a subfolder of the other, no issue.
Can this problem be reproduced with the official owncloud server? (url: https://demo.owncloud.org, user: test, password: test) No. It depends on the setup of a second (personal) external storage.
I still consider this an android specific issue, as classic and new web UI, and desktop client show 'SFTP' exactly once. Reproducable also with server 1.13.2
Environment data
Android version: 11
Device model: motorola g9 play
Stock or customized system:
ownCloud app version: 4.1.1
ownCloud server version: 10.13.3-rc.2
Logs
Web server error log
Insert your webserver log here
owncloud.log.zip apache.log.zip
ownCloud log (data/owncloud.log)
Insert your ownCloud log here
Please provide app debug logs, with HTTP logs enabled. Here you can find more information:
- https://doc.owncloud.com/android/4.1/appendices/troubleshooting.html#log-http-requests-and-responses
Already logged in, click open a few if the SFTP folders.... owncloud.2023-11-21.log
Fresh session, connecting, logging in alice, SFTP appears 3 times. Then click open one of the SFTP folders, see the one exhello.txt file, return to the main folder -> now there is one more SFTP folder. Repeat a few times. owncloud.2023-11-21-new.log
@jesmrec in the log file, PROPFIND response body is cut after 1000 characters (Omitted: 4686 bytes). This isn't helpful. Could you provide @jnweiger a new new APK with 1MB body or test yourself on @jnweiger 's test system?
D: 2023-11-21 00:56:05:437(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Depth: 1
D: 2023-11-21 00:56:05:437(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Authorization: [redacted]
D: 2023-11-21 00:56:05:438(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] X-Request-ID: baa76e0c-0649-4ff8-8595-afdf415a532c
D: 2023-11-21 00:56:05:439(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] User-Agent: Mozilla/5.0 (Android) ownCloud-android/4.1.1
D: 2023-11-21 00:56:05:440(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Accept-Encoding: identity
D: 2023-11-21 00:56:05:441(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Accept-Language: de
D: 2023-11-21 00:56:05:442(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Content-Type: application/xml; charset=utf-8
D: 2023-11-21 00:56:05:443(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Content-Length: 432
D: 2023-11-21 00:56:05:443(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Host: oc10133rc2-20231120.jw-qa.owncloud.works
D: 2023-11-21 00:56:05:444(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Connection: Keep-Alive
D: 2023-11-21 00:56:05:445(LogBuilder.kt:38) .logHttp()[Network, request] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Cookie: oc_sessionPassphrase=YIk6d8NptgNg8TVpjm8YAT%2BHTThXpiudv9EcaYBF2dAFPWU8Gr9vqbVdN5mgMrf4MO2E9ApS8lojZ0ZovfjojcPis%2BYVWn5lpMH4nruFtMkZ8szUlUJRpi%2FZmf7uf7DK; ocxtew3yl384=shkl84rrokciec8fcjmn4mt227; cookie_test=test
D: 2023-11-21 00:56:05:446(LogBuilder.kt:38) .logHttp()[Network, request] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] Length: 432 byte body
D: 2023-11-21 00:56:05:447(LogBuilder.kt:38) .logHttp()[Network, request] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] Type: application/xml; charset=utf-8
D: 2023-11-21 00:56:05:448(LogBuilder.kt:38) .logHttp()[Network, request] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] --> Body start for request
D: 2023-11-21 00:56:05:448(LogBuilder.kt:38) .logHttp()[Network, request] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] <?xml version='1.0' encoding='UTF-8' ?><propfind xmlns="DAV:" xmlns:CAL="urn:ietf:params:xml:ns:caldav" xmlns:CARD="urn:ietf:params:xml:ns:carddav" xmlns:SABRE="http://sabredav.org/ns" xmlns:OC="http://owncloud.org/ns"><prop><displayname /><getcontenttype /><resourcetype /><getcontentlength /><getlastmodified /><creationdate /><getetag /><OC:permissions /><OC:id /><OC:size /><OC:privatelink /><OC:share-types /></prop></propfind>
D: 2023-11-21 00:56:05:449(LogBuilder.kt:38) .logHttp()[Network, request] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] <-- Body end for request -- Omitted: 0 bytes
D: 2023-11-21 00:56:05:599(LogBuilder.kt:38) .logHttp()[Network, response] [info] [baa76e0c-0649-4ff8-8595-afdf415a532c] Method: PROPFIND URL: https://oc10133rc2-20231120.jw-qa.owncloud.works/remote.php/dav/files/alice/ Code: 207 Message: Multi-Status
D: 2023-11-21 00:56:05:601(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Date: Mon, 20 Nov 2023 23:56:05 GMT
D: 2023-11-21 00:56:05:603(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Server: Apache/2.4.41 (Ubuntu)
D: 2023-11-21 00:56:05:604(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Strict-Transport-Security: max-age=15552000; includeSubDomains
D: 2023-11-21 00:56:05:606(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] X-Content-Type-Options: nosniff
D: 2023-11-21 00:56:05:608(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] X-XSS-Protection: 0
D: 2023-11-21 00:56:05:609(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] X-Robots-Tag: none
D: 2023-11-21 00:56:05:610(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] X-Frame-Options: SAMEORIGIN
D: 2023-11-21 00:56:05:611(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] X-Download-Options: noopen
D: 2023-11-21 00:56:05:612(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] X-Permitted-Cross-Domain-Policies: none
D: 2023-11-21 00:56:05:614(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Expires: Thu, 19 Nov 1981 08:52:00 GMT
D: 2023-11-21 00:56:05:615(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Cache-Control: no-store, no-cache, must-revalidate
D: 2023-11-21 00:56:05:617(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Pragma: no-cache
D: 2023-11-21 00:56:05:619(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Set-Cookie: oc_sessionPassphrase=YIk6d8NptgNg8TVpjm8YAT%2BHTThXpiudv9EcaYBF2dAFPWU8Gr9vqbVdN5mgMrf4MO2E9ApS8lojZ0ZovfjojcPis%2BYVWn5lpMH4nruFtMkZ8szUlUJRpi%2FZmf7uf7DK; expires=Tue, 21-Nov-2023 00:16:05 GMT; Max-Age=1200; path=/; secure; HttpOnly; SameSite=Strict
D: 2023-11-21 00:56:05:620(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Content-Security-Policy: default-src 'none';
D: 2023-11-21 00:56:05:622(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Vary: Brief,Prefer
D: 2023-11-21 00:56:05:624(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] DAV: 1, 3, extended-mkcol, 2
D: 2023-11-21 00:56:05:625(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Content-Length: 5710
D: 2023-11-21 00:56:05:626(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Keep-Alive: timeout=5, max=96
D: 2023-11-21 00:56:05:628(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Connection: Keep-Alive
D: 2023-11-21 00:56:05:629(LogBuilder.kt:38) .logHttp()[Network, response] [header] [baa76e0c-0649-4ff8-8595-afdf415a532c] Content-Type: application/xml; charset=utf-8
D: 2023-11-21 00:56:05:630(LogBuilder.kt:38) .logHttp()[Network, response] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] Length: 5710 byte body
D: 2023-11-21 00:56:05:631(LogBuilder.kt:38) .logHttp()[Network, response] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] Type: application/xml; charset=utf-8
D: 2023-11-21 00:56:05:633(LogBuilder.kt:38) .logHttp()[Network, response] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] --> Body start for response
D: 2023-11-21 00:56:05:675(LogBuilder.kt:38) .logHttp()[Network, response] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] <?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>/remote.php/dav/files/alice/</d:href><d:propstat><d:prop><d:resourcetype><d:collection/></d:resourcetype><d:getlastmodified>Mon, 20 Nov 2023 18:45:59 GMT</d:getlastmodified><d:getetag>"beddbf77cf9a759fef1aa55a71cc7e9c"</d:getetag><oc:permissions>RDNVCK</oc:permissions><oc:id>00000187ocxtew3yl384</oc:id><oc:size>34282170</oc:size><oc:privatelink>https://oc10133rc2-20231120.jw-qa.owncloud.works/f/187</oc:privatelink><oc:share-types/></d:prop><d:status>HTTP/1.1 200 OK</d:status></d:propstat><d:propstat><d:prop><d:displayname/><d:getcontenttype/><d:getcontentlength/><d:creationdate/></d:prop><d:status>HTTP/1.1 404 Not Found</d:status></d:propstat></d:response><d:response><d:href>/remote.php/dav/files/alice/Documents/</d:href><d:propstat><d:prop><d:resourcetype><d:collection/></d:resourcetype><d:getlastmodified>Mon, 20 Nov 2023 17:23:07 GMT</d:getlastmodified><d:getet
D: 2023-11-21 00:56:05:677(LogBuilder.kt:38) .logHttp()[Network, response] [body] [baa76e0c-0649-4ff8-8595-afdf415a532c] <-- Body end for response -- Omitted: 4686 bytes
i asked for credentials to check by myself with local build, but i can also build another apk.
Every time the root folder is refreshed, it detects a new SFTP entry to display. PROPFIND is correct, only one entry:
<d:href>/remote.php/dav/files/alice/SFTP/</d:href>
<d:propstat>
<d:prop>
<d:resourcetype>
<d:collection/>
</d:resourcetype>
<d:getlastmodified>Mon, 20 Nov 2023 18:45:59 GMT</d:getlastmodified>
<d:getetag>"655ba98aba5ff"</d:getetag>
<oc:permissions>MCK</oc:permissions>
<oc:id>00000242ocxtew3yl384</oc:id>
<oc:size>125</oc:size>
<oc:privatelink>https://oc10133rc2-20231120.jw-qa.owncloud.works/f/242</oc:privatelink>
<oc:share-types/>
</d:prop>
<d:status>HTTP/1.1 200 OK</d:status>
</d:propstat>
the only difference with other items from the PROPFIND is the isMounted permission (M). Will have to check if something is wrong in that string handling.
Interesting insight to take in account:
- https://github.com/owncloud/core/issues/41124#issuecomment-1825277340