* dtable.cc (dtable::build_fhandler_from_name): Set some fhandler
data on sockets to evaluate AF_LOCAL sockets correctly. (dtable::build_fhandler): Set unit number on sockets. * fhandler.h (fhandler_socket): Add unit number. (fhandler_socket::get_unit): New method. * fhandler_socket.cc (fhandler_socket::fhandler_socket): Set unit number. (fhandler_socket::fstat): Reorganize to return more Linux-like values. * net.cc: include ctype.h. (fdsock): Set unit number when building fhandler. * path.cc (path_conv::check): Set device type to FH_SOCKET if file is a AF_UNIX socket. (get_devn): Evaluate unit for virtual socket devices. (win32_device_name): Set windows path for sockets to unix_path with just backslashes to keep the different names. * syscalls.cc (fstat64): Don't override st_ino, st_dev and st_rdev for sockets. (stat_worker): Ditto. From Pierre Humblet: * autoload.cc (AccessCheck): Add. (DuplicateToken): Add. * security.h (check_file_access): Declare. * syscalls.cc (access): Convert path to Windows, check existence and readonly attribute. Call check_file_access instead of acl_access. * security.cc (check_file_access): Create. * sec_acl (acl_access): Delete.
This commit is contained in:
@@ -299,9 +299,15 @@ dtable::build_fhandler_from_name (int fd, const char *name, HANDLE handle,
|
||||
if (!pc.exists () && handle)
|
||||
pc.fillin (handle);
|
||||
|
||||
fhandler_base *fh = build_fhandler (fd, pc.get_devn (),
|
||||
pc.return_and_clear_normalized_path (),
|
||||
char *posix_path = pc.return_and_clear_normalized_path ();
|
||||
fhandler_base *fh = build_fhandler (fd, pc.get_devn (), posix_path,
|
||||
pc, pc.get_unitn ());
|
||||
if (pc.issocket ()) /* Only true for files pretending an AF_LOCAL socket. */
|
||||
{
|
||||
fhandler_socket * fhs = (fhandler_socket *) fh;
|
||||
fhs->set_addr_family (AF_LOCAL);
|
||||
fhs->set_sun_path (posix_path);
|
||||
}
|
||||
return fh;
|
||||
}
|
||||
|
||||
@@ -352,7 +358,7 @@ dtable::build_fhandler (int fd, DWORD dev, char *unix_name,
|
||||
fh = cnew (fhandler_pipe) (dev);
|
||||
break;
|
||||
case FH_SOCKET:
|
||||
if ((fh = cnew (fhandler_socket) ()))
|
||||
if ((fh = cnew (fhandler_socket) (unit)))
|
||||
inc_need_fixup_before ();
|
||||
break;
|
||||
case FH_DISK:
|
||||
|
Reference in New Issue
Block a user