summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler.h
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2004-04-14 13:40:07 +0000
committerCorinna Vinschen <corinna@vinschen.de>2004-04-14 13:40:07 +0000
commitddf9c4a7444970b5ad4c0ed4a82bdc7bd4964c15 (patch)
tree0f0c9b57900da5163c44f21cc1b3e7288e677d1f /winsup/cygwin/fhandler.h
parentba1a97a18b5d629f62c691d62c69fe97da903b05 (diff)
downloadcygnal-ddf9c4a7444970b5ad4c0ed4a82bdc7bd4964c15.tar.gz
cygnal-ddf9c4a7444970b5ad4c0ed4a82bdc7bd4964c15.tar.bz2
cygnal-ddf9c4a7444970b5ad4c0ed4a82bdc7bd4964c15.zip
* fhandler.cc (fhandler_base::open): Accomodate query_write_control
query_state. (fhandler_base::fchown): New method. * fhandler.h: Declare fchown method in fhandler_base, fhandler_disk_file and fhandler_virtual. (enum query_state): Add query_write_control. * fhandler_disk_file.cc (fhandler_disk_file::fchmod): Set query_state to query_write_control. Only remove FILE_ATTRIBUTE_READONLY if not setting security descriptor. (fhandler_disk_file::fchown): New method. * fhandler_virtual.cc (fhandler_virtual::fchown): New method. * sec_acl.cc (setacl): Call write_sd with additional handle attribute. * security.cc (write_sd): Take handle argument. Only request owner if getting SE_RESTORE_NAME privilege failed. Only open file if NtSetSecurityObject failed or handle is NULL. (set_nt_attribute): Call write_sd with additional handle attribute. * security.h (write_sd): Declare with additional handle argument.
Diffstat (limited to 'winsup/cygwin/fhandler.h')
-rw-r--r--winsup/cygwin/fhandler.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index ece8d4984..0ee198c54 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -62,8 +62,9 @@ enum bg_check_types
enum query_state {
no_query = 0,
- query_read_control = 1,
- query_null_access = 2
+ query_null_access = 1,
+ query_read_control = 2,
+ query_write_control = 3
};
class fhandler_base
@@ -243,6 +244,7 @@ class fhandler_base
int __stdcall fstat_by_handle (struct __stat64 *buf) __attribute__ ((regparm (2)));
int __stdcall fstat_by_name (struct __stat64 *buf) __attribute__ ((regparm (2)));
virtual int __stdcall fchmod (mode_t mode) __attribute__ ((regparm (1)));
+ virtual int __stdcall fchown (__uid32_t uid, __gid32_t gid) __attribute__ ((regparm (2)));
virtual int ioctl (unsigned int cmd, void *);
virtual int fcntl (int cmd, void *);
virtual char const *ttyname () { return get_name (); }
@@ -568,6 +570,7 @@ class fhandler_disk_file: public fhandler_base
bool isdevice () { return false; }
int __stdcall fstat (struct __stat64 *buf) __attribute__ ((regparm (2)));
int __stdcall fchmod (mode_t mode) __attribute__ ((regparm (1)));
+ int __stdcall fchown (__uid32_t uid, __gid32_t gid) __attribute__ ((regparm (2)));
HANDLE mmap (caddr_t *addr, size_t len, DWORD access, int flags, _off64_t off);
int munmap (HANDLE h, caddr_t addr, size_t len);
@@ -1101,6 +1104,7 @@ class fhandler_virtual : public fhandler_base
int close (void);
int __stdcall fstat (struct stat *buf) __attribute__ ((regparm (2)));
int __stdcall fchmod (mode_t mode) __attribute__ ((regparm (1)));
+ int __stdcall fchown (__uid32_t uid, __gid32_t gid) __attribute__ ((regparm (2)));
virtual bool fill_filebuf ();
void fixup_after_exec ();
};