diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2010-04-19 23:52:43 +0400 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2010-04-19 23:52:43 +0400 |
commit | cc01c77f7e025825151435bf00a6dbeb44b137de (patch) | |
tree | 5324b48242c29a1e17e4c8f9386326f47bf15d29 /winsup/cygwin/tty.h | |
parent | 02a33ea774fed6feeeabe2779eef6739e094100e (diff) |
* autoload.cc (GetNamedPipeClientProcessId): Define.
* fhandler.h (fhandler_tty_slave::fch_open_handles): Declare private.
(fhandler_tty_slave::fch_close_handles): Ditto.
(fhandler_tty_slave::cygserver_attach_tty): Drop declaration.
(fhandler_tty_slave::fstat): Declare public.
(fhandler_tty_slave::fchmod): Declare public.
(fhandler_tty_slave::fchown): Declare public.
(class fhandler_pty_master): Add master_ctl handle.
(fhandler_pty_master::pty_master_thread): Declare public.
* fhandler_termios.cc (fhandler_termios::tcinit): If the process
is started from a non-Cygwin process, make it tty process group
leader.
* fhandler_tty.cc: Throughout accommodate additional security related
arguments in calls to functions creating or opening objects.
(close_maybe): Move to start of file to reuse it
in other methods.
(struct pipe_request): Define.
(struct pipe_reply): Define.
(fhandler_tty_slave::open): Throughout, try to open synchronization
objects with MAXIMUM_ALLOWED permissions. Drop call to cygserver.
Try to duplicate pipe handles via master_ctl pipe if duplicating
directly doesn't work.
(fhandler_tty_slave::cygserver_attach_tty): Remove.
(fhandler_tty_slave::init): Close unused incoming pipe handle.
(fhandler_pty_master::close): Send exit message to master control
thread and close master_ctl handle.
(fhandler_pty_master::pty_master_thread): New method, implementing the
master control thread.
(pty_master_thread): Static helper to start master control thread.
(fhandler_pty_master::setup): Simplify creating pipe inheritance.
Make sure we're the one creating the input_available_event. Add
comment to explain why. Create master_ctl pipe and start master
control thread. Close master_ctl handle in case of error.
* security.cc (alloc_sd): Add code to handle tty objects. Add comments
to explain what exactly is required.
(get_object_sd): New function.
(get_object_attribute): New function.
(create_object_sd_from_attribute): New function.
(set_object_sd): New function.
(set_object_attribute): New function.
(set_file_attribute): Change attribute type to mode_t.
* security.h (set_file_attribute): Change attribute type to mode_t.
(get_object_sd): Declare.
(get_object_attribute): Declare.
(create_object_sd_from_attribute): Declare.
(set_object_sd): Declare.
(set_object_attribute): Declare.
* tty.cc (tty::slave_alive): Implement directly instead of via alive.
(tty::exists): Open mutex handle with READ_CONTROL access.
(tty::alive): Remove.
(tty::open_output_mutex): Convert to inline method.
(tty::open_input_mutex): Ditto.
(tty::open_mutex): Take additional ACCESS_MASK parameter for the
mutex open access mask.
(tty::open_inuse): New method.
(tty::create_inuse): Take PSECURITY_ATTRIBUTES parameter. Drop fmt
name parameter. Always create TTY_SLAVE_ALIVE event.
(tty::get_event): Take additional PSECURITY_ATTRIBUTES parameter for
CreateEvent.
* tty.h (class tty): Change declarations according to aforementioned
changes.
(tty::open_output_mutex): Implement as inline method.
(tty::open_input_mutex): Ditto.
Diffstat (limited to 'winsup/cygwin/tty.h')
-rw-r--r-- | winsup/cygwin/tty.h | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/winsup/cygwin/tty.h b/winsup/cygwin/tty.h index b4c02a411..630bdb048 100644 --- a/winsup/cygwin/tty.h +++ b/winsup/cygwin/tty.h @@ -1,6 +1,6 @@ /* tty.h: shared tty info for cygwin - Copyright 2000, 2001, 2002, 2003, 2004, 2006 Red Hat, Inc. + Copyright 2000, 2001, 2002, 2003, 2004, 2006, 2009, 2010 Red Hat, Inc. This file is part of Cygwin. @@ -84,7 +84,8 @@ class fhandler_pty_master; class tty: public tty_min { - HANDLE get_event (const char *fmt, BOOL manual_reset = FALSE) + HANDLE get_event (const char *fmt, PSECURITY_ATTRIBUTES sa, + BOOL manual_reset = FALSE); __attribute__ ((regparm (3))); public: pid_t master_pid; /* PID of tty master process */ @@ -95,13 +96,14 @@ public: bool was_opened; /* True if opened at least once. */ void init (); - HANDLE create_inuse (const char *); - bool alive (const char *fmt); + HANDLE open_inuse (ACCESS_MASK access); + HANDLE create_inuse (PSECURITY_ATTRIBUTES); bool slave_alive (); - bool master_alive (); - HANDLE open_mutex (const char *mutex); - HANDLE open_output_mutex (); - HANDLE open_input_mutex (); + HANDLE open_mutex (const char *mutex, ACCESS_MASK access); + inline HANDLE open_output_mutex (ACCESS_MASK access) + { return open_mutex (OUTPUT_MUTEX, access); } + inline HANDLE open_input_mutex (ACCESS_MASK access) + { return open_mutex (INPUT_MUTEX, access); } bool exists (); void set_master_closed () {master_pid = -1;} static void __stdcall create_master (int); |