From b8eae782251d89b11e86c19f3cd8dbd58fa506ca Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 14 Aug 2023 12:58:14 +0200 Subject: [PATCH] librpc/rpc: add dcesrv_async_reply() helper that disconnects as needed Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Bartlett --- librpc/rpc/dcesrv_core.h | 9 +++++++++ librpc/rpc/dcesrv_reply.c | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/librpc/rpc/dcesrv_core.h b/librpc/rpc/dcesrv_core.h index 98f8dd97506..b03376dad48 100644 --- a/librpc/rpc/dcesrv_core.h +++ b/librpc/rpc/dcesrv_core.h @@ -514,7 +514,16 @@ void dcesrv_context_set_callbacks( struct dcesrv_context *dce_ctx, struct dcesrv_context_callbacks *cb); +/* + * Use dcesrv_async_reply() in async code + */ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call); +void _dcesrv_async_reply(struct dcesrv_call_state *call, + const char *func, + const char *location); +#define dcesrv_async_reply(__call) \ + _dcesrv_async_reply(__call, __func__, __location__) + struct dcesrv_handle *dcesrv_handle_create(struct dcesrv_call_state *call, uint8_t handle_type); diff --git a/librpc/rpc/dcesrv_reply.c b/librpc/rpc/dcesrv_reply.c index bc103e51171..94a616c7f59 100644 --- a/librpc/rpc/dcesrv_reply.c +++ b/librpc/rpc/dcesrv_reply.c @@ -267,3 +267,18 @@ _PUBLIC_ NTSTATUS dcesrv_reply(struct dcesrv_call_state *call) return NT_STATUS_OK; } + +_PUBLIC_ void _dcesrv_async_reply(struct dcesrv_call_state *call, + const char *func, + const char *location) +{ + struct dcesrv_connection *conn = call->conn; + NTSTATUS status; + + status = dcesrv_reply(call); + if (!NT_STATUS_IS_OK(status)) { + D_ERR("%s: %s: dcesrv_async_reply() failed - %s\n", + func, location, nt_errstr(status)); + dcesrv_terminate_connection(conn, nt_errstr(status)); + } +} -- 2.47.3