From 46c645bf4e9909f5296e75028f1f5434e83942d2 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Mon, 4 Feb 2019 17:38:29 +0100 Subject: Move dubious file: -> smb: conversion from INetURLObject to file UCP The Linux-only conversion of file URLs with a non-empty (other than "localhost") authority to smb URLs had been added in 2010 with 0b9ef81ba5ff08d85f21275222458a5b9b9e484c "tools-urlobj-smb-scheme-patch.diff: migrated" (applying a Go-oo patch?) but giving no rationale beyond "process relative SMB paths (in hyperlinks) correctly". That makes it hard to tell whether that patch is (still) actively useful for anything, or was just a misguided hack from the beginning: * Why make this Linux only? What about other non-Windows OSs? (On Windows, such URLs can be resolved as UNC pathnames.) If the reason for Linux-only was that it is the only OS where LO can handle smb URLs via GIO, why not make it conditional on ENABLE_GIO? * Why map to smb? There are various remote file access protocols. Hardcoding smb looks arbitrary here. Anyway, INetURLObject is arguably at a wrong level for such a patch. To not drop the hack wholesale, reimplement it in the file UCP, forwarding to a potential other UCP that can handle smb URLs any file:///... URLs (rewritten as smb URLs) that the file UCP cannot handle itself. (file://localhost/... URLs will already have been normalized to file:///... by INetURLObject when they reach the file UCP, and even if they were not, the osl/file.hxx functionality underlying fileaccess::TaskManager::getUnqFromUrl knows how to handle them, so they will not take the forward-to-smb code branch.) (The corresponding #ifdef WIN code from 0b9ef81ba5ff08d85f21275222458a5b9b9e484c has already been removed with 82034b04e81b74a048595b0eac0f73581ecbc9e4 "tdf#119326 crash when adding "Windows Share" File resource".) (I came across that 2010 patch while looking into "Does not support 'file://' scheme with actual hostname". A next step would be to make the file UCP actually handle any file:///... URLs that denote the local host.) Change-Id: I77242705dc4c6c1e9cb3a4f32253224ac6cb13cb Reviewed-on: https://gerrit.libreoffice.org/67372 Tested-by: Jenkins Reviewed-by: Stephan Bergmann --- ucb/source/ucp/file/prov.cxx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'ucb/source') diff --git a/ucb/source/ucp/file/prov.cxx b/ucb/source/ucp/file/prov.cxx index 22b77d8fadaf..a5b4c0d49c1f 100644 --- a/ucb/source/ucp/file/prov.cxx +++ b/ucb/source/ucp/file/prov.cxx @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include #include @@ -170,7 +172,24 @@ FileProvider::queryContent( aUnc ); if( err ) + { + // Hack to retry file:///... URLs as smb URLs: + INetURLObject url(xIdentifier->getContentIdentifier()); + if (url.GetProtocol() == INetProtocol::File + && !url.GetHost(INetURLObject::DecodeMechanism::NONE).isEmpty()) + { + url.changeScheme(INetProtocol::Smb); + ucbhelper::Content content; + if (ucbhelper::Content::create( + url.GetMainURL(INetURLObject::DecodeMechanism::NONE), + css::uno::Reference(), m_xContext, content)) + { + return content.get(); + } + } + throw IllegalIdentifierException( THROW_WHERE ); + } return Reference< XContent >( new BaseContent( m_pMyShell.get(), xIdentifier, aUnc ) ); } -- cgit