From: Volker Lendecke Date: Fri, 7 Jul 2023 09:40:19 +0000 (+0200) Subject: libsmb: Use reparse_data_buffer_parse() in cli_readlink() X-Git-Tag: tevent-0.16.0~1071 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2e20e984e5fee41e66b03552fdd921fa4fb7ed2e;p=thirdparty%2Fsamba.git libsmb: Use reparse_data_buffer_parse() in cli_readlink() Gives the chance of better debug higher up (not used yet) Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/libsmb/clisymlink.c b/source3/libsmb/clisymlink.c index 1155526f96d..af99cba2101 100644 --- a/source3/libsmb/clisymlink.c +++ b/source3/libsmb/clisymlink.c @@ -27,7 +27,7 @@ #include "libcli/security/secdesc.h" #include "libcli/security/security.h" #include "../libcli/smb/smbXcli_base.h" -#include "libcli/smb/reparse_symlink.h" +#include "libcli/smb/reparse.h" struct cli_symlink_state { struct tevent_context *ev; @@ -368,9 +368,10 @@ NTSTATUS cli_readlink_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, { struct cli_readlink_state *state = tevent_req_data( req, struct cli_readlink_state); - struct symlink_reparse_struct symlink = { .flags = 0, }; + struct reparse_data_buffer buf = { + .tag = 0, + }; NTSTATUS status; - int ret; if (tevent_req_is_nterror(req, &status)) { return status; @@ -393,27 +394,32 @@ NTSTATUS cli_readlink_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, return NT_STATUS_OK; } - ret = symlink_reparse_buffer_parse( - talloc_tos(), &symlink, state->data, state->num_data); - if (ret != 0) { + status = reparse_data_buffer_parse(state, + &buf, + state->data, + state->num_data); + if (!NT_STATUS_IS_OK(status)) { + return NT_STATUS_INVALID_NETWORK_RESPONSE; + } + if (buf.tag != IO_REPARSE_TAG_SYMLINK) { return NT_STATUS_INVALID_NETWORK_RESPONSE; } if (psubstitute_name != NULL) { - *psubstitute_name = talloc_move( - mem_ctx, &symlink.substitute_name); + *psubstitute_name = + talloc_move(mem_ctx, &buf.parsed.lnk.substitute_name); } if (pprint_name != NULL) { - *pprint_name = talloc_move(mem_ctx, &symlink.print_name); + *pprint_name = + talloc_move(mem_ctx, &buf.parsed.lnk.print_name); } if (pflags != NULL) { - *pflags = symlink.flags; + *pflags = buf.parsed.lnk.flags; } - TALLOC_FREE(symlink.print_name); - TALLOC_FREE(symlink.substitute_name); + tevent_req_received(req); return NT_STATUS_OK; }