Wrong behavior of standard IO library when interacting with Samba (very serious)

David Holmes david.holmes at oracle.com
Mon Mar 7 10:54:56 UTC 2022


On 7/03/2022 6:28 pm, Alan Bateman wrote:
> On 07/03/2022 05:33, Glavo wrote:
>> I am a Java application developer. I noticed that when my program runs on
>> Windows in a samba shared folder (mounted as a drive, or accessed via 
>> a UNC
>> path), the Java standard IO library has some unusual behavior.
>> Note that these issues only occur when accessing a folder shared by
>> *Samba*, but not for the folder shared via SMB by another Windows host.
>>
>> One of the bugs was reported years ago (JDK-8154915): `Files.isWritable`
>> always returns false for files shared by samba. It's worth noting for 
>> this
>> question that `File::canWrite()`'s behavior is normal.
>> (So in my program I pass `!Files.isWritable(p) && 
>> p.toFile().canWrite()` to
>> detect if it's shared by samba and give the user a warning)
>> This problem keeps showing up on several of my devices, so it should be
>> fine to reproduce. The reason it wasn't resolved seems to be that the
>> OpenJDK maintainers didn't understand that it came up when interacting 
>> with
>> Samba (not just SMB).
> Testing if a file is writable, without side effects, can be complicated 
> on Windows. File.canXXX only looks at the DOS attribute so can't give an 
> accurate result. Files.isWritable examines the DACL, the legacy DOS 
> attribute, and whether the volume is read-only, so there is more to go 
> wrong. We've looked at many Windows <--> SAMBA interop issues over the 
> years and it's always been that the Windows calls were failing or 
> returning results that suggested the file had a DACL with 0 entries. 

That sounds similar to this old (but still open) SAMBA bug report:

https://bugzilla.samba.org/show_bug.cgi?id=7973

David
-----

> I 
> can't tell from your mail where the issue is but some of the behavior 
> you report in your mail is very unusual. The JDK does not cache results 
> so if you are saying that it requires restarting the JDK then it 
> suggests an issue at a lower level.
> 
> -Alan


More information about the core-libs-dev mailing list