<table><tr><td style="">feverfew added a comment.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D23384">View Revision</a></tr></table><br /><div><div><p>So before this patch we had the following behaviour:</p>

<ol class="remarkup-list">
<li class="remarkup-list-item">If app is KIO-enabled, pass URLs unchanged.</li>
<li class="remarkup-list-item">else for each URL, if app claims to support the protocol pass the original URL, otherwise change the URL to the corresponding KIOExec path.</li>
</ol>

<p>This causes a problem as noted in <a href="https://bugs.kde.org/show_bug.cgi?id=330192" class="remarkup-link" target="_blank" rel="noreferrer">330192</a> and <a href="https://pointieststick.com/2018/01/17/videos-on-samba-shares" class="remarkup-link" target="_blank" rel="noreferrer">this blog post</a>. In particular, if a non-KIO claims to support a certain protocol (e.g., VLC supports smb), then we won't convert to a KIOExec path, but we strip out the stuff that's in <tt style="background: #ebebeb; font-size: 13px;">userInfo()</tt> (credentials) before sending it over.</p>

<p>What I previously tried to do was the following, in an attempt to close:</p>

<ol class="remarkup-list">
<li class="remarkup-list-item">If app is KIO-enabled, pass URLs unchanged.</li>
<li class="remarkup-list-item">else for each URL, if app claims to support the protocol <strong>AND</strong>  <tt style="background: #ebebeb; font-size: 13px;">userInfo()</tt> is empty pass the original URL, otherwise change the URL to the corresponding KIOExec path.</li>
</ol>

<p>However, that doesn't really help as apparently even if, say, a samba share is password protected, at the point I'm checking the password in <tt style="background: #ebebeb; font-size: 13px;">resolveURLs()</tt> or <tt style="background: #ebebeb; font-size: 13px;">resultingArguments()</tt> (truth be told, I'm not sure which, if not both, codepaths are being hit in our current testing), <tt style="background: #ebebeb; font-size: 13px;">userInfo()</tt> is always empty, so this optimisation isn't possible.</p>

<p>So then one could just always direct non-KIO apps to use KIOFuse. Well that causes another problem, what about stuff like http(s)? It doesn't really make sense as a filesystem and we'd definitely like to forward it to the browser. So currently I can special case http/https. but is that the only one we want to special case?</p>

<p>Ideally, I'd like to know if there is a place where <tt style="background: #ebebeb; font-size: 13px;">userInfo</tt> is only empty when there is genuinely no user/pass combo needed to access the resource at the URL. If so, then it can actually be possible to use KIOFuse on apps that support a URL only if it needs to have credentials (which it won't have) such that 330192 can be closed, without needing any hacks.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R241 KIO</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D23384">https://phabricator.kde.org/D23384</a></div></div><br /><div><strong>To: </strong>feverfew, fvogt, davidedmundson, dfaure, ngraham<br /><strong>Cc: </strong>broulik, sitter, davidedmundson, kde-frameworks-devel, ngraham, LeGast00n, GB_2, michaelh, bruns<br /></div>