diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-11-19 18:49:41 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-11-19 18:49:41 +0000 |
commit | 282113ba894449ed17e85b296cf0760d5206ac8d (patch) | |
tree | 830bd7ad49e085ea8cde78fea68848fbbca09880 /winsup/cygserver/transport_pipes.cc | |
parent | 64cfc6f213541f0e9e8e57011af8a56aca8c8216 (diff) | |
download | newlib-282113ba894449ed17e85b296cf0760d5206ac8d.zip newlib-282113ba894449ed17e85b296cf0760d5206ac8d.tar.gz newlib-282113ba894449ed17e85b296cf0760d5206ac8d.tar.bz2 |
Don't use safe_new but new throughout. Fix copyright dates
throughout.
* Makefile.in: Accomodate all new files and name changes.
Add a *.d dependency.
(sbindir): Add.
(etcdir): Drop in favor of more appropriate sysconfdir definition.
(sysconfdir): Add.
(CXXFLAGS): Add -MMD flag. Add SYSCONFDIR definition.
(.SUFFIXES): Add.
(install): Add action items.
(libclean): New target.
(fullclean): Ditto.
* bsd_helper.cc: New file.
* bsd_helper.h: Ditto.
* bsd_log.cc: Ditto.
* bsd_log.h: Ditto.
* bsd_mutex.cc: Ditto.
* bsd_mutex.h: Ditto.
* client.cc: Rearrange to build as less as possible if
__INSIDE_CYGWIN__.
(client_request::handle_request): Add Message Queue and Semaphore
handling.
* cygserver.cc: Rearrange to build as less as possible if
__INSIDE_CYGWIN__. Use new debug/log/panic logging functions.
(DEF_CONFIG_FILE): New definition for configuration file. Use
throughout.
(getfunc): Remove.
(__cygserver__printf): Remove.
(client_request_attach_tty::serve): Return error if impersonation
fails.
(print_usage): Pump up help message.
(print_version): Add output of default configuration file.
(main): Accommodate new options. Allow overwrite of threading options
from config file. Call several new initialization functions. Drop
printing dots. Don't define SIGHANDLE inline.
* cygserver.conf: New file.
* cygserver_process.h: Rename to process.h.
* cygserver_transport.h: Rename to transport.h.
* cygserver_transport_pipes.h: Rename to transport_pipes.h.
* cygserver_transport_sockets.h: Rename to transport_sockets.h.
* msg.cc: Rewrite.
* sem.cc: Rewrite.
* shm.cc: Rewrite.
* sysv_msg.cc: New file, derived from FreeBSD version 1.52.
* sysv_sem.cc: New file, derived from FreeBSD version 1.66.
* sysv_shm.cc: New file, derived from FreeBSD version 1.89.
* threaded_queue.cc: Rearrange to build as less as possible if
__INSIDE_CYGWIN__.
* transport.cc (transport_layer_base::impersonate_client): Define bool.
(transport_layer_base::revert_to_self): Ditto.
* transport.h (transport_layer_base::impersonate_client): Declare bool.
(transport_layer_base::revert_to_self): Ditto.
* transport_pipes.cc (transport_layer_pipes::transport_layer_pipes):
Don't call init_security.
(init_security): Remove.
(transport_layer_pipes::accept): Use global sec_all_nih.
(transport_layer_pipes::connect): Ditto.
(transport_layer_pipes::impersonate_client): Define bool.
(transport_layer_pipes::revert_to_self): Ditt.
* transport_pipes.h (transport_layer_pipes::impersonate_client): Declare
bool.
(transport_layer_pipes::revert_to_self): Ditto.
* woutsup.h: Include bsd compatibility headers.
(SIGHANDLE): Add definition.
(__cygserver__printf): Remove definition.
(__noop_printf): Ditto.
(debug_printf): Define using debug.
(syscall_printf): Define using log.
(system_printf): Ditto.
Drop all other _printf definitions.
Diffstat (limited to 'winsup/cygserver/transport_pipes.cc')
-rw-r--r-- | winsup/cygserver/transport_pipes.cc | 59 |
1 files changed, 23 insertions, 36 deletions
diff --git a/winsup/cygserver/transport_pipes.cc b/winsup/cygserver/transport_pipes.cc index 5fd1158..5f8ceec 100644 --- a/winsup/cygserver/transport_pipes.cc +++ b/winsup/cygserver/transport_pipes.cc @@ -1,6 +1,6 @@ -/* cygserver_transport_pipes.cc +/* transport_pipes.cc - Copyright 2001, 2002 Red Hat Inc. + Copyright 2001, 2002, 2003 Red Hat Inc. Written by Robert Collins <rbtcollins@hotmail.com> @@ -25,11 +25,14 @@ details. */ #include <unistd.h> #include "cygerrno.h" -#include "cygserver_transport.h" -#include "cygserver_transport_pipes.h" +#include "transport.h" +#include "transport_pipes.h" #ifndef __INSIDE_CYGWIN__ #include "cygserver.h" +#include "cygserver_ipc.h" +#else +#include "security.h" #endif enum @@ -64,7 +67,6 @@ transport_layer_pipes::transport_layer_pipes (const HANDLE hPipe) assert (_hPipe); assert (_hPipe != INVALID_HANDLE_VALUE); - init_security (); } #endif /* !__INSIDE_CYGWIN__ */ @@ -75,22 +77,6 @@ transport_layer_pipes::transport_layer_pipes () _is_accepted_endpoint (false), _is_listening_endpoint (false) { - init_security (); -} - -void -transport_layer_pipes::init_security () -{ - assert (wincap.has_security ()); - - /* FIXME: pthread_once or equivalent needed */ - - InitializeSecurityDescriptor (&_sd, SECURITY_DESCRIPTOR_REVISION); - SetSecurityDescriptorDacl (&_sd, TRUE, NULL, FALSE); - - _sec_all_nih.nLength = sizeof (SECURITY_ATTRIBUTES); - _sec_all_nih.lpSecurityDescriptor = &_sd; - _sec_all_nih.bInheritHandle = FALSE; } transport_layer_pipes::~transport_layer_pipes () @@ -138,7 +124,7 @@ transport_layer_pipes::accept (bool *const recoverable) (PIPE_TYPE_BYTE | PIPE_WAIT), PIPE_UNLIMITED_INSTANCES, 0, 0, 1000, - &_sec_all_nih); + &sec_all_nih); const bool duplicate = (accept_pipe == INVALID_HANDLE_VALUE && pipe_instance == 0 @@ -175,7 +161,7 @@ transport_layer_pipes::accept (bool *const recoverable) return NULL; } - return safe_new (transport_layer_pipes, accept_pipe); + return new transport_layer_pipes (accept_pipe); } #endif /* !__INSIDE_CYGWIN__ */ @@ -281,7 +267,7 @@ transport_layer_pipes::connect () _hPipe = CreateFile (_pipe_name, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, - &_sec_all_nih, + &sec_all_nih, OPEN_EXISTING, SECURITY_IMPERSONATION, NULL); @@ -331,32 +317,33 @@ transport_layer_pipes::connect () #ifndef __INSIDE_CYGWIN__ -void +bool transport_layer_pipes::impersonate_client () { assert (_hPipe); assert (_hPipe != INVALID_HANDLE_VALUE); assert (_is_accepted_endpoint); - // verbose: debug_printf ("impersonating pipe %p", _hPipe); - if (_hPipe) + if (_hPipe && !ImpersonateNamedPipeClient (_hPipe)) { - assert (_hPipe != INVALID_HANDLE_VALUE); - - if (!ImpersonateNamedPipeClient (_hPipe)) - debug_printf ("Failed to Impersonate the client, (%lu)", - GetLastError ()); + debug_printf ("Failed to Impersonate client, (%lu)", GetLastError ()); + return false; } - // verbose: debug_printf ("I am who you are"); + + return true; } -void +bool transport_layer_pipes::revert_to_self () { assert (_is_accepted_endpoint); - RevertToSelf (); - // verbose: debug_printf ("I am who I yam"); + if (!RevertToSelf ()) + { + debug_printf ("Failed to RevertToSelf, (%lu)", GetLastError ()); + return false; + } + return true; } #endif /* !__INSIDE_CYGWIN__ */ |