From: Günther Deschner Date: Thu, 16 Nov 2023 20:05:12 +0000 (+0100) Subject: s4-winreg: fix dcesrv_winreg_EnumValue behavior X-Git-Tag: talloc-2.4.2~626 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5119d5540de6fa56cb92c82a2bf719c6656a2988;p=thirdparty%2Fsamba.git s4-winreg: fix dcesrv_winreg_EnumValue behavior When returning WERR_MORE_DATA the winreg server needs to indicate the required buffer size. Guenther Signed-off-by: Guenther Deschner Reviewed-by: Andrew Bartlett Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Mon Nov 20 04:50:00 UTC 2023 on atb-devel-224 --- diff --git a/selftest/knownfail.d/winreg b/selftest/knownfail.d/winreg deleted file mode 100644 index 4d88d8a725a..00000000000 --- a/selftest/knownfail.d/winreg +++ /dev/null @@ -1 +0,0 @@ -^samba4.rpc.winreg.* diff --git a/source4/rpc_server/winreg/rpc_winreg.c b/source4/rpc_server/winreg/rpc_winreg.c index 3adaafead7c..f8bd8c1926b 100644 --- a/source4/rpc_server/winreg/rpc_winreg.c +++ b/source4/rpc_server/winreg/rpc_winreg.c @@ -312,6 +312,10 @@ static WERROR dcesrv_winreg_EnumValue(struct dcesrv_call_state *dce_call, } *r->out.type = (enum winreg_Type) data_type; + if (r->in.size != NULL) { + r->out.size = talloc(mem_ctx, uint32_t); + *r->out.size = data.length; + } /* check the client has enough room for the value */ if (r->in.value != NULL && r->in.size != NULL && @@ -323,9 +327,7 @@ static WERROR dcesrv_winreg_EnumValue(struct dcesrv_call_state *dce_call, r->out.value = data.data; } - if (r->in.size != NULL) { - r->out.size = talloc(mem_ctx, uint32_t); - *r->out.size = data.length; + if (r->in.length != NULL) { r->out.length = r->out.size; }