owncloud / android

:phone: The ownCloud Android App
GNU General Public License v2.0
3.81k stars 3.05k forks source link

[BUG] External storage 'SFTP' is shown multiple times #4223

Open jnweiger opened 9 months ago

jnweiger commented 9 months ago

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):

  1. admin user creates an external storage "SFTP" avialable for all users.
  2. admin user creates the same external storage with same config again, this time named "SFTPalice"
  3. connect android client to the server (e.g. https://oc10133rc2-20231120.jw-qa.owncloud.works/)
  4. log in as user alice
  5. the toplevel folder list shows both, SFTP and SFTPalice, but SFTP is shown multiple times:

photo_2023-11-20_19-51-07

Extra inputs:

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
michaelstingl commented 9 months ago

Please provide app debug logs, with HTTP logs enabled. Here you can find more information:

jnweiger commented 9 months ago

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

michaelstingl commented 9 months ago

@jesmrec in the log file, PROPFINDresponse 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>&quot;beddbf77cf9a759fef1aa55a71cc7e9c&quot;</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
jesmrec commented 9 months ago

i asked for credentials to check by myself with local build, but i can also build another apk.

jesmrec commented 9 months ago

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>&quot;655ba98aba5ff&quot;</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.

jesmrec commented 9 months ago

Interesting insight to take in account: