[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Mon Apr 5 20:35:22 MDT 2010


The branch, master has been updated
       via  15531d9... Add FSCTL_QUERY_ALLOCATED_RANGES to the list of Windows ioctls we support.
      from  e39ed55... selftest: Remove python2.4-isms

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 15531d9df1326a7111363b8d3540985d09027221
Author: Jeremy Allison <jra at samba.org>
Date:   Mon Apr 5 19:33:55 2010 -0700

    Add FSCTL_QUERY_ALLOCATED_RANGES to the list of Windows ioctls we support.
    
    Based on a patch reported and tested by Ira Cooper <samba at ira.wakeful.net>.
    
    Jeremy.

-----------------------------------------------------------------------

Summary of changes:
 source3/smbd/nttrans.c |   52 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/smbd/nttrans.c b/source3/smbd/nttrans.c
index b79bb0b..46edc06 100644
--- a/source3/smbd/nttrans.c
+++ b/source3/smbd/nttrans.c
@@ -2215,6 +2215,58 @@ static void call_nt_transact_ioctl(connection_struct *conn,
 		send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0, NULL, 0);
 		return;
 	}
+	case FSCTL_QUERY_ALLOCATED_RANGES:
+	{
+		NTSTATUS status;
+		uint64_t offset, length;
+
+		if (!fsp_belongs_conn(conn, req, fsp)) {
+			return;
+		}
+
+		if (data_count != 16) {
+			DEBUG(0,("FSCTL_QUERY_ALLOCATED_RANGES: data_count(%u) != 16 is invalid!\n",
+				data_count));
+			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+			return;
+		}
+
+		if (max_data_count < 16) {
+			DEBUG(0,("FSCTL_QUERY_ALLOCATED_RANGES: max_data_count(%u) < 16 is invalid!\n",
+				max_data_count));
+			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+			return;
+		}
+
+		offset = BVAL(pdata,0);
+		length = BVAL(pdata,8);
+
+		if (offset + length < offset) {
+			/* No 64-bit integer wrap. */
+			reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
+			return;
+		}
+
+		status = vfs_stat_fsp(fsp);
+		if (!NT_STATUS_IS_OK(status)) {
+			reply_nterror(req, status);
+			return;
+		}
+
+		if (offset > fsp->fsp_name->st.st_ex_size ||
+				fsp->fsp_name->st.st_ex_size == 0 ||
+				length == 0) {
+			send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0, NULL, 0);
+		} else {
+			uint64_t end = offset + length;
+			end = MIN(end, fsp->fsp_name->st.st_ex_size);
+			SBVAL(pdata,0,0);
+			SBVAL(pdata,8,end);
+			send_nt_replies(conn, req, NT_STATUS_OK, NULL, 0,
+				pdata, 16);
+		}
+		return;
+	}
 	default:
 		if (!logged_ioctl_message) {
 			logged_ioctl_message = true; /* Only print this once... */


-- 
Samba Shared Repository


More information about the samba-cvs mailing list