From: Stefan Metzmacher Date: Mon, 14 Aug 2023 10:58:14 +0000 (+0200) Subject: librpc/rpc: add dcesrv_async_reply() helper that disconnects as needed X-Git-Tag: talloc-2.4.2~1251 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b8eae782251d89b11e86c19f3cd8dbd58fa506ca;p=thirdparty%2Fsamba.git librpc/rpc: add dcesrv_async_reply() helper that disconnects as needed Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Bartlett --- 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)); + } +}