]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libsmb: Convert cli_readlink() to cli_fsctl_send/recv
authorVolker Lendecke <vl@samba.org>
Thu, 29 Sep 2022 10:40:45 +0000 (12:40 +0200)
committerJeremy Allison <jra@samba.org>
Mon, 3 Oct 2022 20:03:32 +0000 (20:03 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/libsmb/clisymlink.c

index 90f48a2029de20be4d5fb4f9569f29aedb922070..eda5aa3a729f5eca96cd804b70c1be8482a4a9c4 100644 (file)
@@ -299,25 +299,14 @@ static void cli_readlink_opened(struct tevent_req *subreq)
                return;
        }
 
-       if (smbXcli_conn_protocol(state->cli->conn) >= PROTOCOL_SMB2_02) {
-               subreq = cli_smb2_get_reparse_point_fnum_send(state,
-                                               state->ev,
-                                               state->cli,
-                                               state->fnum);
-       } else {
-               SIVAL(state->setup, 0, FSCTL_GET_REPARSE_POINT);
-               SSVAL(state->setup, 4, state->fnum);
-               SCVAL(state->setup, 6, 1); /* IsFcntl */
-               SCVAL(state->setup, 7, 0); /* IsFlags */
-
-               subreq = cli_trans_send(state, state->ev, state->cli,
-                               0, SMBnttrans,
-                               NULL, -1, /* name, fid */
-                               NT_TRANSACT_IOCTL, 0,
-                               state->setup, 4, 0, /* setup */
-                               NULL, 0, 0,         /* param */
-                               NULL, 0, 16384); /* data */
-       }
+       subreq = cli_fsctl_send(
+               state,
+               state->ev,
+               state->cli,
+               state->fnum,
+               FSCTL_GET_REPARSE_POINT,
+               NULL,
+               65536);
 
        if (tevent_req_nomem(subreq, req)) {
                return;
@@ -331,26 +320,16 @@ static void cli_readlink_got_reparse_data(struct tevent_req *subreq)
                subreq, struct tevent_req);
        struct cli_readlink_state *state = tevent_req_data(
                req, struct cli_readlink_state);
+       DATA_BLOB out = { .data = NULL, };
 
-       if (smbXcli_conn_protocol(state->cli->conn) >= PROTOCOL_SMB2_02) {
-               DATA_BLOB recv_data;
-               state->get_reparse_status =
-                       cli_smb2_get_reparse_point_fnum_recv(subreq,
-                                                       state,
-                                                       &recv_data);
-               if (NT_STATUS_IS_OK(state->get_reparse_status)) {
-                       state->data = recv_data.data;
-                       state->num_data = recv_data.length;
-               }
-       } else {
-               state->get_reparse_status = cli_trans_recv(
-                       subreq, state, NULL,
-                       NULL, 0, NULL,  /* rsetup */
-                       NULL, 0, NULL,  /* rparam */
-                       &state->data, 20, &state->num_data); /* rdata */
-       }
+       state->get_reparse_status = cli_fsctl_recv(subreq, state, &out);
        TALLOC_FREE(subreq);
 
+       if (NT_STATUS_IS_OK(state->get_reparse_status)) {
+               state->data = out.data;
+               state->num_data = out.length;
+       }
+
        subreq = cli_close_send(state, state->ev, state->cli, state->fnum);
        if (tevent_req_nomem(subreq, req)) {
                return;