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

Reply via email to