1
0
mirror of https://github.com/samba-team/samba.git synced 2025-11-16 20:23:50 +03:00

r5102: This is a major simplification of the logic for controlling top level

servers in smbd. The old code still contained a fairly bit of legacy
from the time when smbd was only handling SMB connection. The new code
gets rid of all of the smb_server specific code in smbd/, and creates
a much simpler infrastructures for new server code.

Major changes include:

 - simplified the process model code a lot.

 - got rid of the top level server and service structures
   completely. The top level context is now the event_context. This
   got rid of service.h and server.h completely (they were the most
   confusing parts of the old code)

 - added service_stream.[ch] for the helper functions that are
   specific to stream type services (services that handle streams, and
   use a logically separate process per connection)

 - got rid of the builtin idle_handler code in the service logic, as
   none of the servers were using it, and it can easily be handled by
   a server in future by adding its own timed_event to the event
   context.

 - fixed some major memory leaks in the rpc server code.

 - added registration of servers, rather than hard coding our list of
   possible servers. This allows for servers as modules in the future.

 - temporarily disabled the winbind code until I add the helper
   functions for that type of server

 - added error checking on service startup. If a configured server
   fails to startup then smbd doesn't startup.

 - cleaned up the command line handling in smbd, removing unused options
This commit is contained in:
Andrew Tridgell
2005-01-30 00:54:57 +00:00
committed by Gerald (Jerry) Carter
parent e561bc3efa
commit cf6a46c3cb
36 changed files with 673 additions and 1598 deletions

View File

@@ -33,7 +33,7 @@
#define MESSAGING_BACKOFF 250000
struct messaging_context {
servid_t server_id;
uint32_t server_id;
struct socket_context *sock;
char *path;
struct dispatch_fn *dispatch;
@@ -51,7 +51,7 @@ struct dispatch_fn {
uint32_t msg_type;
void *private;
void (*fn)(struct messaging_context *msg, void *private,
uint32_t msg_type, servid_t server_id, DATA_BLOB *data);
uint32_t msg_type, uint32_t server_id, DATA_BLOB *data);
};
/* an individual message */
@@ -64,8 +64,8 @@ struct messaging_rec {
struct {
uint32_t version;
uint32_t msg_type;
servid_t from;
servid_t to;
uint32_t from;
uint32_t to;
uint32_t length;
} header;
@@ -78,7 +78,7 @@ struct messaging_rec {
A useful function for testing the message system.
*/
static void ping_message(struct messaging_context *msg, void *private,
uint32_t msg_type, servid_t src, DATA_BLOB *data)
uint32_t msg_type, uint32_t src, DATA_BLOB *data)
{
DEBUG(1,("INFO: Received PING message from server %u [%.*s]\n",
(uint_t)src, data->length, data->data?(const char *)data->data:""));
@@ -88,7 +88,7 @@ static void ping_message(struct messaging_context *msg, void *private,
/*
return the path to a messaging socket
*/
static char *messaging_path(TALLOC_CTX *mem_ctx, servid_t server_id)
static char *messaging_path(TALLOC_CTX *mem_ctx, uint32_t server_id)
{
char *name = talloc_asprintf(mem_ctx, "messaging/msg.%u", (unsigned)server_id);
char *ret;
@@ -228,7 +228,7 @@ static void messaging_listen_handler(struct event_context *ev, struct fd_event *
*/
void messaging_register(struct messaging_context *msg, void *private,
uint32_t msg_type,
void (*fn)(struct messaging_context *, void *, uint32_t, servid_t, DATA_BLOB *))
void (*fn)(struct messaging_context *, void *, uint32_t, uint32_t, DATA_BLOB *))
{
struct dispatch_fn *d;
@@ -365,7 +365,7 @@ static void messaging_backoff_handler(struct event_context *ev, struct timed_eve
/*
Send a message to a particular server
*/
NTSTATUS messaging_send(struct messaging_context *msg, servid_t server, uint32_t msg_type, DATA_BLOB *data)
NTSTATUS messaging_send(struct messaging_context *msg, uint32_t server, uint32_t msg_type, DATA_BLOB *data)
{
struct messaging_rec *rec;
NTSTATUS status;
@@ -429,7 +429,7 @@ NTSTATUS messaging_send(struct messaging_context *msg, servid_t server, uint32_t
/*
Send a message to a particular server, with the message containing a single pointer
*/
NTSTATUS messaging_send_ptr(struct messaging_context *msg, servid_t server,
NTSTATUS messaging_send_ptr(struct messaging_context *msg, uint32_t server,
uint32_t msg_type, void *ptr)
{
DATA_BLOB blob;
@@ -454,7 +454,7 @@ static int messaging_destructor(void *ptr)
/*
create the listening socket and setup the dispatcher
*/
struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx, servid_t server_id, struct event_context *ev)
struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx, uint32_t server_id, struct event_context *ev)
{
struct messaging_context *msg;
NTSTATUS status;
@@ -496,7 +496,7 @@ struct messaging_context *messaging_init(TALLOC_CTX *mem_ctx, servid_t server_id
fde.flags = EVENT_FD_READ;
fde.handler = messaging_listen_handler;
msg->event.ev = talloc_reference(msg,ev);
msg->event.ev = talloc_reference(msg, ev);
msg->event.fde = event_add_fd(ev, &fde, msg);
talloc_set_destructor(msg, messaging_destructor);