diff options
author | Samuel Cabrero <scabrero@suse.de> | 2019-01-24 15:59:04 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2019-10-18 16:07:37 +0000 |
commit | 0523f0b4d28ca125c207448167608d170b9c0909 (patch) | |
tree | aa4d26c14ed232314d10d99525ec2bb59951e75f /source4 | |
parent | 85de73354d982861cc863b4682a8043c22797faa (diff) | |
download | samba-0523f0b4d28ca125c207448167608d170b9c0909.tar.gz |
s4:rpc_server: Add public function dcesrv_connection_loop_start
This function starts the server loop and will be called from s3 and s4
implementations.
Signed-off-by: Samuel Cabrero <scabrero@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'source4')
-rw-r--r-- | source4/rpc_server/dcerpc_server.c | 35 | ||||
-rw-r--r-- | source4/rpc_server/dcerpc_server.h | 2 |
2 files changed, 21 insertions, 16 deletions
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index af39a997985..ac91c7e6406 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -2787,9 +2787,6 @@ struct dcesrv_socket_context { struct dcesrv_context *dcesrv_ctx; }; - -static void dcesrv_read_fragment_done(struct tevent_req *subreq); - static void dcesrv_sock_accept(struct stream_connection *srv_conn) { NTSTATUS status; @@ -2799,7 +2796,6 @@ static void dcesrv_sock_accept(struct stream_connection *srv_conn) dcerpc_binding_get_transport(dcesrv_sock->endpoint->ep_description); struct dcesrv_connection *dcesrv_conn = NULL; int ret; - struct tevent_req *subreq; struct loadparm_context *lp_ctx = dcesrv_sock->dcesrv_ctx->lp_ctx; dcesrv_cleanup_broken_connections(dcesrv_sock->dcesrv_ctx); @@ -2914,17 +2910,13 @@ static void dcesrv_sock_accept(struct stream_connection *srv_conn) srv_conn->private_data = dcesrv_conn; - subreq = dcerpc_read_ncacn_packet_send(dcesrv_conn, - dcesrv_conn->event_ctx, - dcesrv_conn->stream); - if (!subreq) { - status = NT_STATUS_NO_MEMORY; + status = dcesrv_connection_loop_start(dcesrv_conn); + if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("dcesrv_sock_accept: dcerpc_read_fragment_buffer_send(%s)\n", nt_errstr(status))); stream_terminate_connection(srv_conn, nt_errstr(status)); return; } - tevent_req_set_callback(subreq, dcesrv_read_fragment_done, dcesrv_conn); return; } @@ -3023,15 +3015,11 @@ static void dcesrv_conn_wait_done(struct tevent_req *subreq) return; } - subreq = dcerpc_read_ncacn_packet_send(dce_conn, - dce_conn->event_ctx, - dce_conn->stream); - if (!subreq) { - status = NT_STATUS_NO_MEMORY; + status = dcesrv_connection_loop_start(dce_conn); + if (!NT_STATUS_IS_OK(status)) { dcesrv_terminate_connection(dce_conn, nt_errstr(status)); return; } - tevent_req_set_callback(subreq, dcesrv_read_fragment_done, dce_conn); } static void dcesrv_sock_recv(struct stream_connection *conn, uint16_t flags) @@ -3483,3 +3471,18 @@ void dcesrv_transport_terminate_connection(struct dcesrv_connection *dce_conn, struct stream_connection); stream_terminate_connection(srv_conn, reason); } + +_PUBLIC_ NTSTATUS dcesrv_connection_loop_start(struct dcesrv_connection *conn) +{ + struct tevent_req *subreq; + + subreq = dcerpc_read_ncacn_packet_send(conn, + conn->event_ctx, + conn->stream); + if (subreq == NULL) { + return NT_STATUS_NO_MEMORY; + } + tevent_req_set_callback(subreq, dcesrv_read_fragment_done, conn); + + return NT_STATUS_OK; +} diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h index 0f83fef6d31..2341de05b12 100644 --- a/source4/rpc_server/dcerpc_server.h +++ b/source4/rpc_server/dcerpc_server.h @@ -596,4 +596,6 @@ _PUBLIC_ struct imessaging_context *dcesrv_imessaging_context( struct dcesrv_connection *conn); _PUBLIC_ struct server_id dcesrv_server_id(struct dcesrv_connection *conn); +_PUBLIC_ NTSTATUS dcesrv_connection_loop_start(struct dcesrv_connection *conn); + #endif /* SAMBA_DCERPC_SERVER_H */ |