http://bugs.winehq.org/show_bug.cgi?id=14334
--- Comment #9 from Forester pbronline-wine@yahoo.co.uk 2008-09-07 17:08:27 --- (In reply to comment #8)
Certainly I'll try to help.
Many thanks
Working on the wineserver code is not harder than any other places.
No, but I guess if I break it a lot more people will notice.
I find that working out what is wrong is the easy part. Working out what is right is harder, knowing when to stop harder sill, testing things properly hardest of all.
First thing to investigate would be to find out why server/file.c,file_get_sd() fails for a directory.
It doesn't. It doesn't get called for a directory. Neither does the default_get_sd() referenced in the directory_ops structure in server/directory.c. The one we are after is in server/change.c. In here we again have an _ops structure that references the default_get_sd() and default_set_sd(). So that the problem - it's never been implemented.
A first pass might be to implement server/change.c,dir_get_sd() and dir_set_sd() by analogy. Actually, server/file.c,sd_to_mode() factors out the common, hard bit on the set side and after factoring out a mode_to_sd() for the get side, the implementation by analogy is quite easy. But is this right ?
A read of the Microsoft web site was its usual illuminating experience. Back in Wine, I note that for files that is no attempt to handle POSIX group membership and until there is, there seems little point in trying to map between inherited ACEs and the POSIX set-gid for directories so I guess the implementation by analogy will do as a first fix.
That is where I'd like to stop but even my modest setup has access to directories and files on server storage controlled by group membership so I guess this is something someone will have to fix before Wine goes mainstream.
I note also that on the set side of things, there is a FIXME suggesting a call to fchown is missing. Should not such calls fail until this is fixed ? I can't see fchown working unless root is running Wine.
On the get side of things, what I find curious is:
ada->Mask |= FILE_GENERIC_WRITE | DELETE;
My recollection of POSIX file systems is that the ability to delete files is determined by the user's write access to the parent directory. Write access to the file itself is irrelevant so the assignment above just wrong to me.
Anyway, what I really wanted to ask is how I go about testing my fix. How do you test the server ? Indirectly by testing the dll API ? That would be advapi32 in this case ? Do I need to be looking a chapter 5 of the Wine Developer's Guide ? Is it ethical to install Windows from an old OEM disk on a new computer even in a virtual machine ?