v3-6-test: Further fix for bug 8338
authorVolker Lendecke <vl@samba.org>
Tue, 20 Sep 2011 20:45:52 +0000 (22:45 +0200)
committerKarolin Seeger <kseeger@samba.org>
Sat, 30 Jun 2012 12:01:26 +0000 (14:01 +0200)
OS/X can not deal with a 10-vwv read on normal files.

Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Wed Sep 21 00:51:08 CEST 2011 on sn-devel-104
(cherry picked from commit 81703ab7528055bbae8306d2c9a8314316107f85)

source3/libsmb/clireadwrite.c

index 724c846e840969ed79ca8f19d254c71f44dac22e..b80151e2ff7af5a6e3c204bf24051e4184ec062a 100644 (file)
@@ -88,7 +88,6 @@ struct tevent_req *cli_read_andx_create(TALLOC_CTX *mem_ctx,
 {
        struct tevent_req *req, *subreq;
        struct cli_read_andx_state *state;
-       bool bigoffset = False;
        uint8_t wct = 10;
 
        if (size > cli_read_max_bufsize(cli)) {
@@ -115,11 +114,17 @@ struct tevent_req *cli_read_andx_create(TALLOC_CTX *mem_ctx,
        SSVAL(state->vwv + 8, 0, 0);
        SSVAL(state->vwv + 9, 0, 0);
 
-       if ((uint64_t)offset >> 32) {
-               bigoffset = true;
+       if (cli->capabilities & CAP_LARGE_FILES) {
                SIVAL(state->vwv + 10, 0,
                      (((uint64_t)offset)>>32) & 0xffffffff);
-               wct += 2;
+               wct = 12;
+       } else {
+               if ((((uint64_t)offset) & 0xffffffff00000000LL) != 0) {
+                       DEBUG(10, ("cli_read_andx_send got large offset where "
+                                  "the server does not support it\n"));
+                       tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
+                       return tevent_req_post(req, ev);
+               }
        }
 
        subreq = cli_smb_req_create(state, ev, cli, SMBreadX, 0, wct,