Skip to content

[stable33] fix: resolve share mount for remote circle members - #2844

Closed
backportbot[bot] wants to merge 1 commit into
stable33from
backport/2837/stable33
Closed

[stable33] fix: resolve share mount for remote circle members#2844
backportbot[bot] wants to merge 1 commit into
stable33from
backport/2837/stable33

Conversation

@backportbot

@backportbot backportbot Bot commented Aug 28, 2026

Copy link
Copy Markdown

Backport of #2796

Warning, This backport's changes differ from the original and might be incomplete 鈿狅笍

Todo

  • Review and resolve any conflicts
  • Review and verify the backported changes
  • Amend HEAD commit to remove the line stating to skip CI

Learn more about backports at https://docs.nextcloud.com/server/stable/go.php?to=developer-backports.

Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
@cristianscheid
cristianscheid force-pushed the backport/2837/stable33 branch from dbf87f3 to 762b953 Compare August 28, 2026 14:01
@cristianscheid cristianscheid changed the title [stable33] [stable34] fix: resolve share mount for remote circle members [stable33] fix: resolve share mount for remote circle members Aug 28, 2026
@cristianscheid
cristianscheid marked this pull request as ready for review August 28, 2026 14:02
@cristianscheid

Copy link
Copy Markdown
Member

/backport to stable32

@cristianscheid

cristianscheid commented Aug 28, 2026

Copy link
Copy Markdown
Member

closing this backport for now, since I faced some issues while testing and don't have the time to investigate further right now

details on the issues below:

  • this backport required some manual tweaking to fix conflicts
  • stable33 still uses deprecated CircleMountManager class, removed in this PR:
  • in lib/Model/Mount::toMount(), tried the following:
- 'manager' => $this->getMountManager(),
+ 'manager' => $this->getExternalShareManager(),

original code returned the deprecated CircleMountManager, tried returning ExternalShareManager instead, matching master

tested backport/2837/stable33 on a federated environment (nc_1 + nc_2), like below:

Nextcloud server on stable33 as well

  • on nc_1 as bob:
    • created test_team
    • checked "allow federated members"
    • added john from nc_2
    • shared test_folder with test_team
  • on nc_2 as john:
    • appears as member of test_team
    • when trying to access files, test_folder does not appear among them

following exceptions logged when loading "All files" page as john:

{"reqId":"IRpHvV08xjiGJMSFZMYJ","level":2,"time":"2026-08-28T14:40:12+00:00","remoteAddr":"172.20.0.1","user":"john","app":"no app in context","method":"PROPFIND","url":"/remote.php/dav/files/john/","scriptName":"/remote.php","message":"Failed to fetch share info","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","version":"33.0.8.2","exception":{"Exception":"GuzzleHttp\\Exception\\ClientException","Message":"Client error: `POST https://touted-sawfish.haze.127.0.0.1.sslip.io/index.php/apps/files_sharing/shareinfo?t=` resulted in a `404 Not Found` response:\n{\"data\":[],\"status\":\"error\"}\n","Code":404,"Trace":[{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php","line":72,"function":"create","class":"GuzzleHttp\\Exception\\RequestException","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":209,"function":"{closure:{closure:{closure:GuzzleHttp\\Middleware::httpErrors():60}:61}:67}","class":"GuzzleHttp\\Middleware","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":158,"function":"callHandler","class":"GuzzleHttp\\Promise\\Promise","type":"::","args":[1,"*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/TaskQueue.php","line":52,"function":"{closure:GuzzleHttp\\Promise\\Promise::settle():156}","class":"GuzzleHttp\\Promise\\Promise","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":251,"function":"run","class":"GuzzleHttp\\Promise\\TaskQueue","type":"->","args":[true]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":227,"function":"invokeWaitFn","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":272,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":229,"function":"invokeWaitList","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":69,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php","line":273,"function":"wait","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/lib/private/Http/Client/Client.php","line":290,"function":"request","class":"GuzzleHttp\\Client","type":"->","args":["POST","*** sensitive parameters replaced ***",{"verify":"/var/www/html/resources/config/ca-bundle.crt","timeout":10,"version":"2.0","curl":{"84":4},"connect_timeout":10,"0":"And 4 more entries, set log level to debug to see all entries"}]},{"file":"/var/www/html/apps/files_sharing/lib/External/Storage.php","line":308,"function":"post","class":"OC\\Http\\Client\\Client","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/apps/files_sharing/lib/External/Storage.php","line":198,"function":"getShareInfo","class":"OCA\\Files_Sharing\\External\\Storage","type":"->","args":[0]},{"function":"checkStorageAvailability","class":"OCA\\Files_Sharing\\External\\Storage","type":"->","args":[]},{"file":"/var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php","line":259,"function":"call_user_func_array","args":[[{"__class__":"OCA\\Files_Sharing\\External\\Storage"},"checkStorageAvailability"],"*** sensitive parameters replaced ***"]},{"file":"/var/www/html/apps/files_sharing/lib/External/Scanner.php","line":50,"function":"__call","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["checkStorageAvailability","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/lib/private/Files/View.php","line":1565,"function":"scanFile","class":"OCA\\Files_Sharing\\External\\Scanner","type":"->","args":[""]},{"file":"/var/www/html/lib/private/Files/Node/Folder.php","line":86,"function":"getDirectoryContent","class":"OC\\Files\\View","type":"->","args":["/john/files","",{"__class__":"OC\\Files\\Node\\LazyUserFolder"}]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Directory.php","line":262,"function":"getDirectoryListing","class":"OC\\Files\\Node\\Folder","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php","line":57,"function":"getChildren","class":"OCA\\DAV\\Connector\\Sabre\\Directory","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php","line":106,"function":"cacheDirectory","class":"OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":161,"function":"preloadCollection","class":"OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"{closure:OCA\\DAV\\Connector\\Sabre\\Server::getMonitoredCallback():154}","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/PropFindPreloadNotifyPlugin.php","line":44,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["preloadCollection",["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"collectionPreloadNotifier","class":"OCA\\DAV\\Connector\\Sabre\\PropFindPreloadNotifyPlugin","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1052,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["propFind",["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":984,"function":"getPropertiesByNode","class":"Sabre\\DAV\\Server","type":"->","args":["*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1664,"function":"getPropertiesIteratorForPath","class":"Sabre\\DAV\\Server","type":"->","args":["files/john",["{DAV:}getcontentlength","{DAV:}getcontenttype","{DAV:}getetag","{DAV:}getlastmodified","{DAV:}creationdate","And 24 more entries, set log level to debug to see all entries"],1]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1649,"function":"writeMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\Xml\\Writer","elementMap":"*** sensitive parameters replaced ***","contextUri":"/remote.php/dav/","namespaceMap":{"DAV:":"d","http://sabredav.org/ns":"s","http://owncloud.org/ns":"oc","http://nextcloud.org/ns":"nc"},"classMap":"*** sensitive parameters replaced ***"},{"__class__":"Generator"},false]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":346,"function":"generateMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Generator"},false]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPropFind","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:PROPFIND",[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"/var/www/html/apps/dav/lib/Connector/Sabre/Server.php","line":212,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":431,"function":"start","class":"OCA\\DAV\\Connector\\Sabre\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":25,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":151,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Exception/RequestException.php","Line":115,"message":"Failed to fetch share info","exception":"{\"class\":\"GuzzleHttp\\Exception\\ClientException\",\"message\":\"Client error: `POST https://touted-sawfish.haze.127.0.0.1.sslip.io/index.php/apps/files_sharing/shareinfo?t=` resulted in a `404 Not Found` response:\\n{\\\"data\\\":[],\\\"status\\\":\\\"error\\\"}\\n\",\"code\":404,\"file\":\"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Exception/RequestException.php:115\",\"trace\":\"#0 /var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php(72): GuzzleHttp\\Exception\\RequestException::create(Object(GuzzleHttp\\Psr7\\Request), Object(GuzzleHttp\\Psr7\\Response), NULL, Array, NULL)\\n#1 /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php(209): GuzzleHttp\\Middleware::{closure:{closure:{closure:GuzzleHttp\\Middleware::httpErrors():60}:61}:67}(Object(GuzzleHttp\\Psr7\\Response))\\n#2 /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php(158): GuzzleHttp\\Promise\\Promise::callHandler(1, Object(GuzzleHttp\\Psr7\\Response), NULL)\\n#3 /var/www/html/3rdparty/guzzlehttp/promises/src/TaskQueue.php(52): GuzzleHttp\\Promise\\Promise::{closure:GuzzleHttp\\Promise\\Promise::settle():156}()\\n#4 /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php(251): GuzzleHttp\\Promise\\TaskQueue->run(true)\\n#5 /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php(227): GuzzleHttp\\Promise\\Promise->invokeWaitFn()\\n#6 /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php(272): GuzzleHttp\\Promise\\Promise->waitIfPending()\\n#7 /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php(229): GuzzleHttp\\Promise\\Promise->invokeWaitList()\\n#8 /var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php(69): GuzzleHttp\\Promise\\Promise->waitIfPending()\\n#9 /var/www/html/3rdparty/guzzlehttp/guzzle/src/Client.php(273): GuzzleHttp\\Promise\\Promise->wait()\\n#10 /var/www/html/lib/private/Http/Client/Client.php(290): GuzzleHttp\\Client->request('POST', 'https://touted-...', Array)\\n#11 /var/www/html/apps/files_sharing/lib/External/Storage.php(308): OC\\Http\\Client\\Client->post('https://touted-...', Array)\\n#12 /var/www/html/apps/files_sharing/lib/External/Storage.php(198): OCA\\Files_Sharing\\External\\Storage->getShareInfo(0)\\n#13 [internal function]: OCA\\Files_Sharing\\External\\Storage->checkStorageAvailability()\\n#14 /var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php(259): call_user_func_array(Array, Array)\\n#15 /var/www/html/apps/files_sharing/lib/External/Scanner.php(50): OC\\Files\\Storage\\Wrapper\\Wrapper->__call('checkStorageAva...', Array)\\n#16 /var/www/html/lib/private/Files/View.php(1565): OCA\\Files_Sharing\\External\\Scanner->scanFile('')\\n#17 /var/www/html/lib/private/Files/Node/Folder.php(86): OC\\Files\\View->getDirectoryContent('/john/files', '', Object(OC\\Files\\Node\\LazyUserFolder))\\n#18 /var/www/html/apps/dav/lib/Connector/Sabre/Directory.php(262): OC\\Files\\Node\\Folder->getDirectoryListing()\\n#19 /var/www/html/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php(57): OCA\\DAV\\Connector\\Sabre\\Directory->getChildren()\\n#20 /var/www/html/apps/dav/lib/Connector/Sabre/CommentPropertiesPlugin.php(106): OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin->cacheDirectory(Object(OCA\\DAV\\Files\\FilesHome), Object(Sabre\\DAV\\PropFind))\\n#21 /var/www/html/apps/dav/lib/Connector/Sabre/Server.php(161): OCA\\DAV\\Connector\\Sabre\\CommentPropertiesPlugin->preloadCollection(Object(Sabre\\DAV\\PropFind), Object(OCA\\DAV\\Files\\FilesHome))\\n#22 /var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php(89): OCA\\DAV\\Connector\\Sabre\\Server->{closure:OCA\\DAV\\Connector\\Sabre\\Server::getMonitoredCallback():154}(Object(Sabre\\DAV\\PropFind), Object(OCA\\DAV\\Files\\FilesHome))\\n#23 /var/www/html/apps/dav/lib/Connector/Sabre/PropFindPreloadNotifyPlugin.php(44): Sabre\\DAV\\Server->emit('preloadCollecti...', Array)\\n#24 /var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php(89): OCA\\DAV\\Connector\\Sabre\\PropFindPreloadNotifyPlugin->collectionPreloadNotifier(Object(Sabre\\DAV\\PropFind), Object(OCA\\DAV\\Files\\FilesHome))\\n#25 /var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php(1052): Sabre\\DAV\\Server->emit('propFind', Array)\\n#26 /var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php(984): Sabre\\DAV\\Server->getPropertiesByNode(Object(Sabre\\DAV\\PropFind), Object(OCA\\DAV\\Files\\FilesHome))\\n#27 /var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php(1664): Sabre\\DAV\\Server->getPropertiesIteratorForPath('files/john', Array, 1)\\n#28 /var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php(1649): Sabre\\DAV\\Server->writeMultiStatus(Object(Sabre\\Xml\\Writer), Object(Generator), false)\\n#29 /var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php(346): Sabre\\DAV\\Server->generateMultiStatus(Object(Generator), false)\\n#30 /var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php(89): Sabre\\DAV\\CorePlugin->httpPropFind(Object(Sabre\\HTTP\\Request), Object(Sabre\\HTTP\\Response))\\n#31 /var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php(472): Sabre\\DAV\\Server->emit('method:PROPFIND', Array)\\n#32 /var/www/html/apps/dav/lib/Connector/Sabre/Server.php(212): Sabre\\DAV\\Server->invokeMethod(Object(Sabre\\HTTP\\Request), Object(Sabre\\HTTP\\Response))\\n#33 /var/www/html/apps/dav/lib/Server.php(431): OCA\\DAV\\Connector\\Sabre\\Server->start()\\n#34 /var/www/html/apps/dav/appinfo/v2/remote.php(25): OCA\\DAV\\Server->exec()\\n#35 /var/www/html/remote.php(151): require_once('/var/www/html/a...')\\n#36 {main}\"}","CustomMessage":"Failed to fetch share info"}}
{"reqId":"IRpHvV08xjiGJMSFZMYJ","level":3,"time":"2026-08-28T14:40:12+00:00","remoteAddr":"172.20.0.1","user":"john","app":"files_sharing","method":"PROPFIND","url":"/remote.php/dav/files/john/","scriptName":"/remote.php","message":"Mount point to remove share is not an external share, share probably doesn't exist","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36","version":"33.0.8.2","data":{"app":"files_sharing","mountPoint":"/john/files/test_folder"}}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant