svn commit: samba r15640 - in branches/SAMBA_4_0/source: libcli/raw smb_server/smb torture/raw

metze at samba.org metze at samba.org
Tue May 16 16:50:51 GMT 2006


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)) {



More information about the samba-cvs mailing list