This is the mail archive of the cygwin@cygwin.com mailing list for the Cygwin project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi, I'm one of those people who makes use of 'screen' on unix systems, and, after reading about the various problems people were having getting screen to work under Cygwin, decided to take a closer look at it myself. I now understand what screen is doing, and why it's failing, but it's not a trivial fix. Screen make some assumptions concerning unix-domain sockets (ie: a file-system based socket) that basically don't work under Cygwin. However, they should! I've gone through cygwin code and it looks like it should actually provide the necessary support, but it's not doing the right thing. The symptom is that once a unix-domain socket is create, you can't change it's permissions (or any of it attributes), reguardless of weither it's actively being used or not. To demonstrate, create a socket somewhere. I've attached sample C source to create a socket (/tmp/foosock). The socket will be created based on your current umask, of course. Now, try changing the permissions on the socket, using chmod. Notice that you can't change the permissions at all. Not only that, but you can't change the ownerid or groupid. Note that I am using CYGWIN="ntsec tty". I am doing this on a plain, local NTFS filesystems (running NT4+SP6) and I'm not connected to any NTdomain; I'm logged in locally as "Administrator". I can change permissions and ownership on any regular file in the same filesystem. I've also attached an strace of the creating of the socket (mkfoosock.trc) and an strace of chmod trying to set the mode (chmod.trc). % strace --mask=all --output=mkfoosock.trc ./mkfoosock % ls -al /tmp/foosock srwxrwxrwt 1 Administ None 0 May 2 18:16 /tmp/foosock % strace --mask=all --output=chmod.trc chmod 600 /tmp/foosock % ls -al /tmp/foosock srwxrwxrwt 1 Administ None 0 May 2 18:16 /tmp/foosock Note that to Windows this file is marked as a (S)ystem file and isn't visible to most applications. I've examined the traces and looked through some of the cygwin specific code (winsup/cygwin/fhandler_socket.cc, security.cc, syscalls.cc), but without a debug environment, I can't really follow the flow effectively. Can someone who's got a debug environment setup, try tracing fhandler_socket::bind() and see if it actually creates the security descriptors correctly? Then trace chmod to see why it can't change the security descriptor? If this can be solved, it'll go a long way towards making screen work under Cygwin and making the usability/security of unix-domain sockets better. If noone can readily test-drive this, I'll just have to go figure out how to setup a debug env myself :| Thanks! -- Peter A. Castro <doctor@fruitbat.org> or <Peter.Castro@oracle.com> "Cats are just autistic Dogs" -- Dr. Tony Attwood
Attachment:
mkfoosock.c
Description: mkfoosock.c
Attachment:
mkfoosock.trc
Description: mkfoosock.trc
Attachment:
chmod.trc
Description: chmod.trc
-- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |