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.
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
/* cygserver_client.cc
|
||||
/* client.cc
|
||||
|
||||
Copyright 2001, 2002 Red Hat Inc.
|
||||
Copyright 2001, 2002, 2003 Red Hat Inc.
|
||||
|
||||
Written by Egor Duda <deo@logos-m.ru>
|
||||
|
||||
@ -22,11 +22,12 @@ details. */
|
||||
#include <unistd.h>
|
||||
|
||||
#include "cygerrno.h"
|
||||
#include "cygserver_msg.h"
|
||||
#include "cygserver_sem.h"
|
||||
#include "cygserver_shm.h"
|
||||
#include "safe_memory.h"
|
||||
|
||||
#include "cygserver.h"
|
||||
#include "cygserver_transport.h"
|
||||
#include "transport.h"
|
||||
|
||||
int cygserver_running = CYGSERVER_UNKNOWN; // Nb: inherited by children.
|
||||
|
||||
@ -48,6 +49,8 @@ client_request_get_version::client_request_get_version ()
|
||||
* the first numbers match, that is).
|
||||
*/
|
||||
|
||||
#ifdef __INSIDE_CYGWIN__
|
||||
|
||||
bool
|
||||
client_request_get_version::check_version () const
|
||||
{
|
||||
@ -71,8 +74,6 @@ client_request_get_version::check_version () const
|
||||
return ok;
|
||||
}
|
||||
|
||||
#ifdef __INSIDE_CYGWIN__
|
||||
|
||||
client_request_attach_tty::client_request_attach_tty (DWORD nmaster_pid,
|
||||
HANDLE nfrom_master,
|
||||
HANDLE nto_master)
|
||||
@ -87,15 +88,6 @@ client_request_attach_tty::client_request_attach_tty (DWORD nmaster_pid,
|
||||
"from_master = %lu, to_master = %lu"),
|
||||
req.pid, req.master_pid, req.from_master, req.to_master);
|
||||
}
|
||||
|
||||
#else /* !__INSIDE_CYGWIN__ */
|
||||
|
||||
client_request_attach_tty::client_request_attach_tty ()
|
||||
: client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req))
|
||||
{
|
||||
// verbose: syscall_printf ("created");
|
||||
}
|
||||
|
||||
#endif /* __INSIDE_CYGWIN__ */
|
||||
|
||||
/*
|
||||
@ -230,7 +222,12 @@ client_request::send (transport_layer_base * const conn)
|
||||
// sizeof (_header), msglen ());
|
||||
}
|
||||
|
||||
#ifndef __INSIDE_CYGWIN__
|
||||
#ifdef __OUTSIDE_CYGWIN__
|
||||
|
||||
client_request_attach_tty::client_request_attach_tty ()
|
||||
: client_request (CYGSERVER_REQUEST_ATTACH_TTY, &req, sizeof (req))
|
||||
{
|
||||
}
|
||||
|
||||
/*
|
||||
* client_request::handle_request ()
|
||||
@ -277,16 +274,22 @@ client_request::handle_request (transport_layer_base *const conn,
|
||||
switch (header.request_code)
|
||||
{
|
||||
case CYGSERVER_REQUEST_GET_VERSION:
|
||||
req = safe_new0 (client_request_get_version);
|
||||
req = new client_request_get_version;
|
||||
break;
|
||||
case CYGSERVER_REQUEST_SHUTDOWN:
|
||||
req = safe_new0 (client_request_shutdown);
|
||||
req = new client_request_shutdown;
|
||||
break;
|
||||
case CYGSERVER_REQUEST_ATTACH_TTY:
|
||||
req = safe_new0 (client_request_attach_tty);
|
||||
req = new client_request_attach_tty;
|
||||
break;
|
||||
case CYGSERVER_REQUEST_MSG:
|
||||
req = new client_request_msg;
|
||||
break;
|
||||
case CYGSERVER_REQUEST_SEM:
|
||||
req = new client_request_sem;
|
||||
break;
|
||||
case CYGSERVER_REQUEST_SHM:
|
||||
req = safe_new0 (client_request_shm);
|
||||
req = new client_request_shm;
|
||||
break;
|
||||
default:
|
||||
syscall_printf ("unknown request code %d received: request ignored",
|
||||
@ -299,74 +302,9 @@ client_request::handle_request (transport_layer_base *const conn,
|
||||
req->msglen (header.msglen);
|
||||
req->handle (conn, cache);
|
||||
|
||||
safe_delete (req);
|
||||
|
||||
#ifndef DEBUGGING
|
||||
printf ("."); // A little noise when we're being quiet.
|
||||
#endif
|
||||
delete req;
|
||||
}
|
||||
|
||||
#endif /* !__INSIDE_CYGWIN__ */
|
||||
|
||||
client_request::client_request (request_code_t const id,
|
||||
void * const buf,
|
||||
size_t const buflen)
|
||||
: _header (id, buflen),
|
||||
_buf (buf),
|
||||
_buflen (buflen)
|
||||
{
|
||||
assert ((!_buf && !_buflen) || (_buf && _buflen));
|
||||
}
|
||||
|
||||
client_request::~client_request ()
|
||||
{}
|
||||
|
||||
int
|
||||
client_request::make_request ()
|
||||
{
|
||||
assert (cygserver_running == CYGSERVER_UNKNOWN \
|
||||
|| cygserver_running == CYGSERVER_OK \
|
||||
|| cygserver_running == CYGSERVER_UNAVAIL);
|
||||
|
||||
if (cygserver_running == CYGSERVER_UNKNOWN)
|
||||
cygserver_init ();
|
||||
|
||||
assert (cygserver_running == CYGSERVER_OK \
|
||||
|| cygserver_running == CYGSERVER_UNAVAIL);
|
||||
|
||||
/* Don't retry every request if the server's not there */
|
||||
if (cygserver_running == CYGSERVER_UNAVAIL)
|
||||
{
|
||||
syscall_printf ("cygserver un-available");
|
||||
error_code (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
|
||||
transport_layer_base *const transport = create_server_transport ();
|
||||
|
||||
assert (transport);
|
||||
|
||||
if (transport->connect () == -1)
|
||||
{
|
||||
if (errno)
|
||||
error_code (errno);
|
||||
else
|
||||
error_code (ENOSYS);
|
||||
safe_delete (transport);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// verbose: debug_printf ("connected to server %p", transport);
|
||||
|
||||
send (transport);
|
||||
|
||||
safe_delete (transport);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef __INSIDE_CYGWIN__
|
||||
|
||||
/*
|
||||
* client_request::handle ()
|
||||
*
|
||||
@ -470,7 +408,84 @@ client_request::handle (transport_layer_base *const conn,
|
||||
// sizeof (_header), msglen ());
|
||||
}
|
||||
|
||||
#endif /* !__INSIDE_CYGWIN__ */
|
||||
/* The server side implementation of make_request. Very simple. */
|
||||
int
|
||||
client_request::make_request ()
|
||||
{
|
||||
transport_layer_base *const transport = create_server_transport ();
|
||||
assert (transport);
|
||||
if (transport->connect () == -1)
|
||||
{
|
||||
if (errno)
|
||||
error_code (errno);
|
||||
else
|
||||
error_code (ENOSYS);
|
||||
delete transport;
|
||||
return -1;
|
||||
}
|
||||
send (transport);
|
||||
delete transport;
|
||||
return 0;
|
||||
}
|
||||
#endif /* __OUTSIDE_CYGWIN__ */
|
||||
|
||||
client_request::client_request (request_code_t const id,
|
||||
void * const buf,
|
||||
size_t const buflen)
|
||||
: _header (id, buflen),
|
||||
_buf (buf),
|
||||
_buflen (buflen)
|
||||
{
|
||||
assert ((!_buf && !_buflen) || (_buf && _buflen));
|
||||
}
|
||||
|
||||
client_request::~client_request ()
|
||||
{}
|
||||
|
||||
#ifdef __INSIDE_CYGWIN__
|
||||
int
|
||||
client_request::make_request ()
|
||||
{
|
||||
assert (cygserver_running == CYGSERVER_UNKNOWN \
|
||||
|| cygserver_running == CYGSERVER_OK \
|
||||
|| cygserver_running == CYGSERVER_UNAVAIL);
|
||||
|
||||
if (cygserver_running == CYGSERVER_UNKNOWN)
|
||||
cygserver_init ();
|
||||
|
||||
assert (cygserver_running == CYGSERVER_OK \
|
||||
|| cygserver_running == CYGSERVER_UNAVAIL);
|
||||
|
||||
/* Don't retry every request if the server's not there */
|
||||
if (cygserver_running == CYGSERVER_UNAVAIL)
|
||||
{
|
||||
syscall_printf ("cygserver un-available");
|
||||
error_code (ENOSYS);
|
||||
return -1;
|
||||
}
|
||||
|
||||
transport_layer_base *const transport = create_server_transport ();
|
||||
|
||||
assert (transport);
|
||||
|
||||
if (transport->connect () == -1)
|
||||
{
|
||||
if (errno)
|
||||
error_code (errno);
|
||||
else
|
||||
error_code (ENOSYS);
|
||||
delete transport;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// verbose: debug_printf ("connected to server %p", transport);
|
||||
|
||||
send (transport);
|
||||
|
||||
delete transport;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
check_cygserver_available ()
|
||||
@ -523,3 +538,4 @@ cygserver_init ()
|
||||
if (!check_cygserver_available ())
|
||||
cygserver_running = CYGSERVER_UNAVAIL;
|
||||
}
|
||||
#endif /* __INSIDE_CYGWIN__ */
|
||||
|
Reference in New Issue
Block a user