On Oct 21 16:58, Franz Sirl wrote: > Am 2011-10-21 11:10, schrieb Corinna Vinschen: > >>It might be worth a try to ask the Novell support why this occurs. > >>This is a bug, IMHO. Since Vista, this call should even be supported > >>in the Win32 API, using the call > >> > >> FILE_BASIC_INFO fbi; > >> GetFileInformationByHandleEx (fhdl, FileBasicInfo,&fbi, sizeof fbi); > > This succeeds?? Arrgh, looking at my testcase again, I see that I > only used NtOpenFile(WRITE_ATTRIBUTES | DELETE). I reused my code to > test the read-only file deletion, but forgot to change this, sorry. > As soon as I added READ_ATTRIBUTES, the testcase using > NtQueryInformationFile(FileBasicInformation) succeeded.
Ok, I change that in Cygwin for completeness. It's still not used, but it's good to know. > >But there's one more change: As you observed, NcFsd does not return a > >STATUS_SHARING_VIOLATION when trying to open the top level directory for > >DELETE, rather trying to set the delete disposition fails with > >STATUS_CANNOT_DELETE. When this error occurs, unlink_nt now also checks > >for NcFsd, and if so, it tries delete-on-close as another method to > >delete the file/directory. > > > >This is just an experiment, so could you please take this snapshot and > >test your fine testcase under strace on W7/NcFsd and send the strace here? > > The functionality works (directory is deleted), but an error is > reported anyway: > > rm-8.4: cannot remove `lev1': Directory not empty > > The corresponding strace looks like: > [...] > 1754 244698 [main] rm-8.4 6088 seterrno_from_nt_status: > /ext/build/netrel/src/cygwin-snapshot-20111021-1/winsup/cygwin/fhandler_disk_file.cc:1735 > status 0xC0000101 -> windows error 145 Ouch, yes, that makes sense. The test for success should only be performed for samba shares. I'll fix that. > >However, IMHO this is a bug in NcFsd, just like the sharing violation > >in NWFS. Since NcFsd is activaly maintained, it might make sense for > >you or any other NcFsd user to open a support case for this problem > > I will create a support case with Novell. To make my understanding > clear, I think there are actually 2 problems here (Win32 calls for > illustration, assuming the directory is already opened): > 0. The directory has been opened with all sharing modes allowed "elsewhere". > 1. CreateFile(FILE_READ_ATTRIBUTES | DELETE, FILE_SHARE_DELETE) > should not succeed, but fail with STATUS_SHARING_VIOLATION I didn't see a full strace from W7. Did you check that this doesn't happen anyway? > 2. CreateFile(FILE_READ_ATTRIBUTES | DELETE, FILE_SHARE_READ | > FILE_SHARE_WRITE | FILE_SHARE_DELETE) should succeed and the ... and that therefore this second NtCreateFile works as expected? > following SetFileInformationByHandle(DELETE) should succeed too Yes. It should not be required to open the dir with delete-on-close, just because it's still open elsewhere. After all, the meaning of "setting the delete disposition" is not that the dir has to be deleted immediately if it's still in use. > This is what I came up with after looking what happens against a > samba-3.4.3 and WinXP share. Does that sound right? More or less, yes. I'll check in my changes shortly. Thanks, Corinna -- Corinna Vinschen Please, send mails regarding Cygwin to Cygwin Project Co-Leader cygwin AT cygwin DOT com Red Hat -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple