* fhandler.cc (fhandler_base::open): Set query access mode according

to query_open setting.
	(fhandler_base::fhandler_base): Initialize query_open.
	* fhandler.h (FH_QUERYOPEN): Drop.
	(enum query_state): Add.
	(class fhandler_base): Add query_open member.
	(fhandler_base::get_query_open): Redefine to use query_open.
	(fhandler_base::set_query_open): Ditto.
	* fhandler_disk_file.cc (fhandler_base::fstat_fs): Remove O_DIROPEN
	from open_flags since it's added in open_fs anyway.  Remove
	query_open_already.  Use new query_open settings.  Rearrange slightly.
	(fhandler_base::fstat_helper): Add get_io_handle as parameter to
	get_file_attribute.
	* security.cc (get_nt_object_attribute): Make returning an int.
	Return -1 on error, 0 otherwise.
	(get_file_attribute): Take an object handle as argument. Move down
	to allow calling get_nt_object_attribute in case a non-NULL handle
	is given.
	* security.h (get_file_attribute): Add handle to argument list.
	* syscalls.cc (chown_worker): Accomodate new definition of
	get_file_attribute.
This commit is contained in:
Corinna Vinschen
2004-04-08 07:57:28 +00:00
parent 284a55c33e
commit a9a5b2eab0
7 changed files with 94 additions and 63 deletions

View File

@@ -1367,40 +1367,7 @@ get_nt_attribute (const char *file, mode_t *attribute,
get_info_from_sd (sd, attribute, uidret, gidret);
}
int
get_file_attribute (int use_ntsec, const char *file,
mode_t *attribute, __uid32_t *uidret, __gid32_t *gidret)
{
int res;
syscall_printf ("file: %s", file);
if (use_ntsec && allow_ntsec && wincap.has_security ())
{
get_nt_attribute (file, attribute, uidret, gidret);
return 0;
}
if (uidret)
*uidret = myself->uid;
if (gidret)
*gidret = myself->gid;
if (!attribute)
return 0;
if (allow_ntea)
{
int oatt = *attribute;
res = NTReadEA (file, ".UNIXATTR", (char *)attribute, sizeof (*attribute));
*attribute |= oatt;
}
else
res = 0;
return res > 0 ? 0 : -1;
}
static void
static int
get_nt_object_attribute (HANDLE handle, SE_OBJECT_TYPE object_type,
mode_t *attribute, __uid32_t *uidret,
__gid32_t *gidret)
@@ -1436,12 +1403,16 @@ get_nt_object_attribute (HANDLE handle, SE_OBJECT_TYPE object_type,
| GROUP_SECURITY_INFORMATION
| OWNER_SECURITY_INFORMATION,
NULL, NULL, NULL, NULL, &psd)))
__seterrno_from_win_error (ret);
{
__seterrno_from_win_error (ret);
return -1;
}
else
{
get_info_from_sd (psd, attribute, uidret, gidret);
LocalFree (psd);
}
return 0;
}
int
@@ -1457,6 +1428,41 @@ get_object_attribute (HANDLE handle, SE_OBJECT_TYPE object_type,
return -1;
}
int
get_file_attribute (int use_ntsec, HANDLE handle, const char *file,
mode_t *attribute, __uid32_t *uidret, __gid32_t *gidret)
{
int res;
syscall_printf ("file: %s", file);
if (use_ntsec && allow_ntsec && wincap.has_security ())
{
if (handle && get_nt_object_attribute (handle, SE_FILE_OBJECT,
attribute, uidret, gidret))
get_nt_attribute (file, attribute, uidret, gidret);
return 0;
}
if (uidret)
*uidret = myself->uid;
if (gidret)
*gidret = myself->gid;
if (!attribute)
return 0;
if (allow_ntea)
{
int oatt = *attribute;
res = NTReadEA (file, ".UNIXATTR", (char *)attribute, sizeof (*attribute));
*attribute |= oatt;
}
else
res = 0;
return res > 0 ? 0 : -1;
}
bool
add_access_allowed_ace (PACL acl, int offset, DWORD attributes,
PSID sid, size_t &len_add, DWORD inherit)