diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index ab1c240cb..53f07bdce 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,10 @@ +2003-02-21 Corinna Vinschen + + * fhandler_socket.cc (fhandler_socket::fhandler_socket): Fix compiler + warning. + (fhandler_socket::fstat): Simplify. Set st_uid/st_gid to effective + uid/gid of current process in case of open sockets. + 2003-02-21 Corinna Vinschen * dtable.cc (dtable::build_fhandler_from_name): Set some fhandler diff --git a/winsup/cygwin/fhandler_socket.cc b/winsup/cygwin/fhandler_socket.cc index b10e28a8c..aa18320e5 100644 --- a/winsup/cygwin/fhandler_socket.cc +++ b/winsup/cygwin/fhandler_socket.cc @@ -95,7 +95,7 @@ get_inet_addr (const struct sockaddr *in, int inlen, /* fhandler_socket */ fhandler_socket::fhandler_socket (int nunit) - : fhandler_base (FH_SOCKET), unit (nunit), sun_path (NULL) + : fhandler_base (FH_SOCKET), sun_path (NULL), unit (nunit) { set_need_fork_fixup (); prot_info_ptr = (LPWSAPROTOCOL_INFOA) cmalloc (HEAP_BUF, @@ -310,7 +310,7 @@ int __stdcall fhandler_socket::fstat (struct __stat64 *buf, path_conv *pc) { int res; - if (get_addr_family () == AF_LOCAL && get_sun_path ()) + if (get_addr_family () == AF_LOCAL && get_sun_path () && !get_socket_type ()) { path_conv spc (get_sun_path (), PC_SYM_NOFOLLOW | PC_NULLEMPTY | PC_FULL | PC_POSIX, @@ -321,13 +321,6 @@ fhandler_socket::fstat (struct __stat64 *buf, path_conv *pc) if (fh) { res = fh->fstat (buf, &spc); - /* Faking Linux like values on top of the file specific values. */ - if (get_socket_type ()) /* fstat() */ - { - buf->st_dev = 0; - buf->st_mode |= S_IRWXU | S_IRWXG | S_IRWXO; - buf->st_ino = (ino_t) get_handle (); - } buf->st_rdev = buf->st_size = buf->st_blocks = 0; return res; } @@ -338,9 +331,11 @@ fhandler_socket::fstat (struct __stat64 *buf, path_conv *pc) { if (get_socket_type ()) /* fstat */ { + buf->st_dev = 0; buf->st_ino = (ino_t) get_handle (); - buf->st_mode &= ~S_IFMT; - buf->st_mode |= S_IFSOCK; + buf->st_mode = S_IFSOCK | S_IRWXU | S_IRWXG | S_IRWXO; + buf->st_uid = geteuid32 (); + buf->st_gid = getegid32 (); } else {