svn commit: samba r15714 - in branches/SAMBA_4_0/source/smb_server/smb: .

metze at samba.org metze at samba.org
Fri May 19 14:15:22 GMT 2006


Author: metze
Date: 2006-05-19 14:15:21 +0000 (Fri, 19 May 2006)
New Revision: 15714

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15714

Log:
fix async handling of ntioctl calls and push the DATA_BLOB into the reply

metze
Modified:
   branches/SAMBA_4_0/source/smb_server/smb/nttrans.c


Changeset:
Modified: branches/SAMBA_4_0/source/smb_server/smb/nttrans.c
===================================================================
--- branches/SAMBA_4_0/source/smb_server/smb/nttrans.c	2006-05-19 14:10:14 UTC (rev 15713)
+++ branches/SAMBA_4_0/source/smb_server/smb/nttrans.c	2006-05-19 14:15:21 UTC (rev 15714)
@@ -283,6 +283,28 @@
 }
 
 /* 
+   parse NTTRANS_IOCTL send
+ */
+static NTSTATUS nttrans_ioctl_send(struct nttrans_op *op)
+{
+	union smb_ioctl *info = talloc_get_type(op->op_info, union smb_ioctl);
+	NTSTATUS status;
+
+	/* 
+	 * we pass 0 as data_count here,
+	 * because we reuse the DATA_BLOB from the smb_ioctl
+	 * struct
+	 */
+	status = nttrans_setup_reply(op, op->trans, 0, 0, 1);
+	NT_STATUS_NOT_OK_RETURN(status);
+
+	op->trans->out.setup[0]		= 0;
+	op->trans->out.data		= info->ntioctl.out.blob;
+
+	return NT_STATUS_OK;
+}
+
+/* 
    parse NTTRANS_IOCTL request
  */
 static NTSTATUS nttrans_ioctl(struct smbsrv_request *req, 
@@ -290,11 +312,6 @@
 {
 	struct smb_nttrans *trans = op->trans;
 	union smb_ioctl *nt;
-	uint32_t function;
-	uint16_t fnum;
-	uint8_t filter;
-	BOOL fsctl;
-	NTSTATUS status;
 
 	/* should have at least 4 setup words */
 	if (trans->in.setup_count != 4) {
@@ -304,24 +321,17 @@
 	nt = talloc(op, union smb_ioctl);
 	NT_STATUS_HAVE_NO_MEMORY(nt);
 	
-	function  = IVAL(trans->in.setup, 0);
-	fnum  = SVAL(trans->in.setup, 4);
-	fsctl = CVAL(trans->in.setup, 6);
-	filter = CVAL(trans->in.setup, 7);
+	nt->ntioctl.level		= RAW_IOCTL_NTIOCTL;
+	nt->ntioctl.in.function		= IVAL(trans->in.setup, 0);
+	nt->ntioctl.in.file.fnum	= SVAL(trans->in.setup, 4);
+	nt->ntioctl.in.fsctl		= CVAL(trans->in.setup, 6);
+	nt->ntioctl.in.filter		= CVAL(trans->in.setup, 7);
+	nt->ntioctl.in.max_data		= trans->in.max_data;
+	nt->ntioctl.in.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.max_data = trans->in.max_data;
-	nt->ntioctl.in.blob = trans->in.data;
+	op->op_info = nt;
+	op->send_fn = nttrans_ioctl_send;
 
-	status = nttrans_setup_reply(op, trans, 0, 0, 1);
-	NT_STATUS_NOT_OK_RETURN(status);
-
-	trans->out.setup[0] = 0;
-	
 	return ntvfs_ioctl(req->ntvfs, nt);
 }
 



More information about the samba-cvs mailing list