Author: metze Date: 2006-05-16 16:50:50 +0000 (Tue, 16 May 2006) New Revision: 15640
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15640 Log: - NT IOCTL calls also have an 'in' data_blob - fix the receive code of NT IOCTL's we only need the NTTRANS data payload not the SMB payload here metze Modified: branches/SAMBA_4_0/source/libcli/raw/interfaces.h branches/SAMBA_4_0/source/libcli/raw/rawioctl.c branches/SAMBA_4_0/source/smb_server/smb/nttrans.c branches/SAMBA_4_0/source/torture/raw/ioctl.c Changeset: Modified: branches/SAMBA_4_0/source/libcli/raw/interfaces.h =================================================================== --- branches/SAMBA_4_0/source/libcli/raw/interfaces.h 2006-05-16 16:43:34 UTC (rev 15639) +++ branches/SAMBA_4_0/source/libcli/raw/interfaces.h 2006-05-16 16:50:50 UTC (rev 15640) @@ -1716,6 +1716,7 @@ uint32_t function; BOOL fsctl; uint8_t filter; + DATA_BLOB blob; } in; struct { DATA_BLOB blob; Modified: branches/SAMBA_4_0/source/libcli/raw/rawioctl.c =================================================================== --- branches/SAMBA_4_0/source/libcli/raw/rawioctl.c 2006-05-16 16:43:34 UTC (rev 15639) +++ branches/SAMBA_4_0/source/libcli/raw/rawioctl.c 2006-05-16 16:50:50 UTC (rev 15640) @@ -86,7 +86,7 @@ SCVAL(setup, 7, parms->ntioctl.in.filter); nt.in.function = NT_TRANSACT_IOCTL; nt.in.params = data_blob(NULL, 0); - nt.in.data = data_blob(NULL, 0); + nt.in.data = parms->ntioctl.in.blob; return smb_raw_nttrans_send(tree, &nt); } @@ -98,13 +98,22 @@ TALLOC_CTX *mem_ctx, union smb_ioctl *parms) { - if (!smbcli_request_receive(req) || - smbcli_request_is_error(req)) { - return smbcli_request_destroy(req); - } + NTSTATUS status; + struct smb_nttrans nt; + TALLOC_CTX *tmp_mem; - parms->ntioctl.out.blob = smbcli_req_pull_blob(req, mem_ctx, req->in.data, -1); - return smbcli_request_destroy(req); + tmp_mem = talloc_new(mem_ctx); + NT_STATUS_HAVE_NO_MEMORY(tmp_mem); + + status = smb_raw_nttrans_recv(req, tmp_mem, &nt); + if (!NT_STATUS_IS_OK(status)) goto fail; + + parms->ntioctl.out.blob = nt.out.data; + talloc_steal(mem_ctx, parms->ntioctl.out.blob.data); + +fail: + talloc_free(tmp_mem); + return status; } Modified: branches/SAMBA_4_0/source/smb_server/smb/nttrans.c =================================================================== --- branches/SAMBA_4_0/source/smb_server/smb/nttrans.c 2006-05-16 16:43:34 UTC (rev 15639) +++ branches/SAMBA_4_0/source/smb_server/smb/nttrans.c 2006-05-16 16:50:50 UTC (rev 15640) @@ -304,7 +304,6 @@ uint16_t fnum; uint8_t filter; BOOL fsctl; - DATA_BLOB *blob; NTSTATUS status; /* should have at least 4 setup words */ @@ -320,13 +319,12 @@ fsctl = CVAL(trans->in.setup, 6); filter = CVAL(trans->in.setup, 7); - blob = &trans->in.data; - nt->ntioctl.level = RAW_IOCTL_NTIOCTL; nt->ntioctl.in.file.fnum = fnum; nt->ntioctl.in.function = function; nt->ntioctl.in.fsctl = fsctl; nt->ntioctl.in.filter = filter; + nt->ntioctl.in.blob = trans->in.data; status = nttrans_setup_reply(op, trans, 0, 0, 1); NT_STATUS_NOT_OK_RETURN(status); Modified: branches/SAMBA_4_0/source/torture/raw/ioctl.c =================================================================== --- branches/SAMBA_4_0/source/torture/raw/ioctl.c 2006-05-16 16:43:34 UTC (rev 15639) +++ branches/SAMBA_4_0/source/torture/raw/ioctl.c 2006-05-16 16:50:50 UTC (rev 15640) @@ -105,6 +105,7 @@ nt.ntioctl.in.file.fnum = fnum; nt.ntioctl.in.fsctl = True; nt.ntioctl.in.filter = 0; + nt.ntioctl.in.blob = data_blob(NULL, 0); status = smb_raw_ioctl(cli->tree, mem_ctx, &nt); CHECK_STATUS(status, NT_STATUS_OK); @@ -115,6 +116,7 @@ nt.ntioctl.in.file.fnum = fnum; nt.ntioctl.in.fsctl = True; nt.ntioctl.in.filter = 0; + nt.ntioctl.in.blob = data_blob(NULL, 0); status = smb_raw_ioctl(cli->tree, mem_ctx, &nt); if (NT_STATUS_IS_OK(status)) {