]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libsmb: Use reparse_data_buffer_parse() in cli_readlink()
authorVolker Lendecke <vl@samba.org>
Fri, 7 Jul 2023 09:40:19 +0000 (11:40 +0200)
committerStefan Metzmacher <metze@samba.org>
Thu, 10 Aug 2023 13:40:31 +0000 (13:40 +0000)
Gives the chance of better debug higher up (not used yet)

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/libsmb/clisymlink.c

index 1155526f96d5fdf457968e0de5d3f665f466d7b9..af99cba210189007ec3442a62c180ac3b0ca8527 100644 (file)
@@ -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;
 }