summaryrefslogtreecommitdiff
path: root/source4
diff options
context:
space:
mode:
authorSamuel Cabrero <scabrero@suse.de>2019-01-24 15:59:04 +0100
committerAndreas Schneider <asn@cryptomilk.org>2019-10-18 16:07:37 +0000
commit0523f0b4d28ca125c207448167608d170b9c0909 (patch)
treeaa4d26c14ed232314d10d99525ec2bb59951e75f /source4
parent85de73354d982861cc863b4682a8043c22797faa (diff)
downloadsamba-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.c35
-rw-r--r--source4/rpc_server/dcerpc_server.h2
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 */