]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: libsmb: In cli_posix_open_internal_send() (SMBtrans2:TRANSACT2_SETPATHINFO) check...
authorJeremy Allison <jra@samba.org>
Fri, 9 Sep 2022 17:29:30 +0000 (10:29 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 15 Sep 2022 19:44:00 +0000 (19:44 +0000)
See smbtorture3: SMB1-DFS-PATHS: test_smb1_setpathinfo_XXXX()

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Noel Power <npower@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Thu Sep 15 19:44:00 UTC 2022 on sn-devel-184

source3/libsmb/clifile.c

index deb7bd222a34945b903ce4f9cc383042a0e22b79..1d1e6f033377cc51deaacb482f0ebcbcf02e93cd 100644 (file)
@@ -5794,6 +5794,7 @@ static struct tevent_req *cli_posix_open_internal_send(TALLOC_CTX *mem_ctx,
 {
        struct tevent_req *req = NULL, *subreq = NULL;
        struct cli_posix_open_internal_state *state = NULL;
+       char *fname_cp = NULL;
 
        req = tevent_req_create(
                mem_ctx, &state, struct cli_posix_open_internal_state);
@@ -5811,11 +5812,18 @@ static struct tevent_req *cli_posix_open_internal_send(TALLOC_CTX *mem_ctx,
        }
        SSVAL(state->param, 0, SMB_POSIX_PATH_OPEN);
 
+       /*
+        * TRANSACT2_SETPATHINFO on a DFS share must use DFS names.
+        */
+       fname_cp = smb1_dfs_share_path(state, cli, fname);
+       if (tevent_req_nomem(fname_cp, req)) {
+               return tevent_req_post(req, ev);
+       }
        state->param = trans2_bytes_push_str(
                state->param,
                smbXcli_conn_use_unicode(cli->conn),
-               fname,
-               strlen(fname)+1,
+               fname_cp,
+               strlen(fname_cp)+1,
                NULL);
 
        if (tevent_req_nomem(state->param, req)) {