smb: disable mode bits getting forwarded to KIO
ClosedPublic

Authored by sitter on Feb 13 2020, 3:28 PM.

Details

Summary

mode bits in libsmb_stat are fairly cheaply constructed. file and directory
qualification is alright beyond that it is a bit of a shambles.
specifically +W is set iff the DOS attribute READONLY isn't set, but
that attribute doesn't mean what we think it means, at least not on
NT+ systems. see exhaustive comment.

long story short: we cannot represent mode bits accurately because NT's
access controls simply do not map to posix mode bits. therefore I'm
removing the mode setting for the udsentry, making all entries effectively
writable.

whether an entry truly is writable is hard to say anyway. specifically
because SMB+NTFS have independent ACLs. so, the SMB ACL may allow a
given user or group to do something, that doesn't mean they'll also
have permissions on a file system level.

BUG: 414482
FIXED-IN: 19.12.3

Test Plan

previously not writable shares as described in the bug report are now writable.
permission dialog looks a bit meh now, it wasn't really designed around not knowing
what the access situation is. gnome simply shows a "dunno what permissions we have" label
instead of everything, that seems like a reasonable approach

Diff Detail

Repository
R320 KIO Extras
Lint
Automatic diff as part of commit; lint not applicable.
Unit
Automatic diff as part of commit; unit tests not applicable.
sitter created this revision.Feb 13 2020, 3:28 PM
Restricted Application added projects: Dolphin, Frameworks. · View Herald TranscriptFeb 13 2020, 3:28 PM
Restricted Application added subscribers: kfm-devel, kde-frameworks-devel. · View Herald Transcript
sitter requested review of this revision.Feb 13 2020, 3:28 PM
sitter added a subscriber: dfaure.Feb 13 2020, 3:31 PM

@dfaure btw, it seems you cannot have no ACL displayed. i.e. properties dialog does d->hasExtendedACL = item.ACL().isExtended() || item.defaultACL().isValid(); but isExtended is even true for invalid ACLs, so in the smb scenario I have neither modes nor ACLs so it is effectively KACL() which is invalid but still isExtended for some reason. Not sure I'll find the motivation to fix that any time soon but thought I should tell you at least :)

ngraham accepted this revision.Feb 13 2020, 9:51 PM

Nice, this fixes the bug for me and I think the code change makes logical sense. I really appreciate these long comments.

This revision is now accepted and ready to land.Feb 13 2020, 9:51 PM
This revision was automatically updated to reflect the committed changes.