From: Simo Sorce Date: Thu, 21 Apr 2011 19:05:12 +0000 (-0400) Subject: s3-rpc: Expose some internal functions X-Git-Tag: samba-4.0.0alpha17~702 X-Git-Url: http://git.samba.org/samba.git/?a=commitdiff_plain;h=d67fc9c1ebd22dc275a790fc1e5e7a453b48ac7e;p=sfrench%2Fsamba-autobuild%2F.git s3-rpc: Expose some internal functions This will allow to hook the prefork socket handlers to the rpc service. Signed-off-by: Andreas Schneider --- diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c index 9134b958abb..e5e856b61ff 100644 --- a/source3/rpc_server/rpc_server.c +++ b/source3/rpc_server/rpc_server.c @@ -160,28 +160,10 @@ static void named_pipe_listener(struct tevent_context *ev, uint16_t flags, void *private_data); -bool setup_named_pipe_socket(const char *pipe_name, - struct tevent_context *ev_ctx, - struct messaging_context *msg_ctx) +int create_named_pipe_socket(const char *pipe_name) { - struct dcerpc_ncacn_listen_state *state; - struct tevent_fd *fde; - char *np_dir; - - state = talloc(ev_ctx, struct dcerpc_ncacn_listen_state); - if (!state) { - DEBUG(0, ("Out of memory\n")); - return false; - } - state->ep.name = talloc_strdup(state, pipe_name); - if (state->ep.name == NULL) { - DEBUG(0, ("Out of memory\n")); - goto out; - } - state->fd = -1; - - state->ev_ctx = ev_ctx; - state->msg_ctx = msg_ctx; + char *np_dir = NULL; + int fd = -1; /* * As lp_ncalrpc_dir() should have 0755, but @@ -194,7 +176,7 @@ bool setup_named_pipe_socket(const char *pipe_name, goto out; } - np_dir = talloc_asprintf(state, "%s/np", lp_ncalrpc_dir()); + np_dir = talloc_asprintf(talloc_tos(), "%s/np", lp_ncalrpc_dir()); if (!np_dir) { DEBUG(0, ("Out of memory\n")); goto out; @@ -206,13 +188,44 @@ bool setup_named_pipe_socket(const char *pipe_name, goto out; } - state->fd = create_pipe_sock(np_dir, pipe_name, 0700); - if (state->fd == -1) { + fd = create_pipe_sock(np_dir, pipe_name, 0700); + if (fd == -1) { DEBUG(0, ("Failed to create pipe socket! [%s/%s]\n", np_dir, pipe_name)); goto out; } + + DEBUG(10, ("Openened pipe socket fd %d for %s\n", fd, pipe_name)); + +out: talloc_free(np_dir); + return fd; +} + +bool setup_named_pipe_socket(const char *pipe_name, + struct tevent_context *ev_ctx, + struct messaging_context *msg_ctx) +{ + struct dcerpc_ncacn_listen_state *state; + struct tevent_fd *fde; + + state = talloc(ev_ctx, struct dcerpc_ncacn_listen_state); + if (!state) { + DEBUG(0, ("Out of memory\n")); + return false; + } + state->ep.name = talloc_strdup(state, pipe_name); + if (state->ep.name == NULL) { + DEBUG(0, ("Out of memory\n")); + goto out; + } + state->fd = create_named_pipe_socket(pipe_name); + if (state->fd == -1) { + goto out; + } + + state->ev_ctx = ev_ctx; + state->msg_ctx = msg_ctx; DEBUG(10, ("Openened pipe socket fd %d for %s\n", state->fd, pipe_name)); @@ -236,11 +249,6 @@ out: return false; } -static void named_pipe_accept_function(struct tevent_context *ev_ctx, - struct messaging_context *msg_ctx, - const char *pipe_name, - int fd); - static void named_pipe_listener(struct tevent_context *ev, struct tevent_fd *fde, uint16_t flags, @@ -310,10 +318,9 @@ struct named_pipe_client { static void named_pipe_accept_done(struct tevent_req *subreq); -static void named_pipe_accept_function(struct tevent_context *ev_ctx, - struct messaging_context *msg_ctx, - const char *pipe_name, - int fd) +void named_pipe_accept_function(struct tevent_context *ev_ctx, + struct messaging_context *msg_ctx, + const char *pipe_name, int fd) { struct named_pipe_client *npc; struct tstream_context *plain; diff --git a/source3/rpc_server/rpc_server.h b/source3/rpc_server/rpc_server.h index be6a1543331..b81c7e2c39b 100644 --- a/source3/rpc_server/rpc_server.h +++ b/source3/rpc_server/rpc_server.h @@ -26,9 +26,13 @@ typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p); void set_incoming_fault(struct pipes_struct *p); void process_complete_pdu(struct pipes_struct *p); +int create_named_pipe_socket(const char *pipe_name); bool setup_named_pipe_socket(const char *pipe_name, struct tevent_context *ev_ctx, struct messaging_context *msg_ctx); +void named_pipe_accept_function(struct tevent_context *ev_ctx, + struct messaging_context *msg_ctx, + const char *pipe_name, int fd); uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx, struct messaging_context *msg_ctx,