[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Wed Sep 7 02:22:03 MDT 2011


The branch, master has been updated
       via  674f9cc s3:smb2cli: fix marshalling of smb2_create_blobs in  smb2cli_create()
       via  013d2ab s3:smb2cli: don't terminate the pathname in smb2cli_query_directory()
       via  96a3ec5 s3:smb2cli: don't terminate the pathname in smb2cli_create()
       via  817bb1f s3:smb2cli: don't terminate the pathname in smb2cli_tcon()
       via  884a5a6 s3:smb2cli: SMB2_TCON needs one dyn byte to that the structure size check works.
       via  85b393a s3:smb2cli: SMB2_WRITE needs one dyn byte to that the structure size check works.
       via  4260903 s3:smb2cli: SMB2_READ needs one dyn byte to that the structure size check works.
       via  fbcba9f s3:smb2cli: SMB2_QUERY_DIRECTORY needs one dyn byte to that the structure size check works.
       via  b57fb1e s3:smb2cli: SMB2_CREATE needs one dyn byte to that the structure size check works.
       via  35d4afc s3:smb2cli: SMB2_SESSION_SETUP needs one dyn byte to that the structure size check works.
      from  9646d80 Revert "Part 5 of bugfix for bug #7509 - smb_acl_to_posix: ACL is invalid for set (Invalid argument)"

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


- Log -----------------------------------------------------------------
commit 674f9cc1d9f45a955802571936ff275e0444b2ea
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Sep 7 08:15:00 2011 +0200

    s3:smb2cli: fix marshalling of smb2_create_blobs in  smb2cli_create()
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Wed Sep  7 10:21:55 CEST 2011 on sn-devel-104

commit 013d2abc75b7d17e8ea22ae1d90c0308f3332ad0
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: don't terminate the pathname in smb2cli_query_directory()
    
    Windows generates NT_STATUS_OBJECT_NAME_INVALID otherwise.
    
    metze

commit 96a3ec51b40ff6d84d7194dcd5386884f00122bd
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: don't terminate the pathname in smb2cli_create()
    
    Windows generates NT_STATUS_OBJECT_NAME_INVALID otherwise.
    
    metze

commit 817bb1f8f24bb86bcf675a9294169d5320512178
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: don't terminate the pathname in smb2cli_tcon()
    
    Windows generates NT_STATUS_BAD_NETWORK_NAME otherwise.
    
    metze

commit 884a5a620f06c76c8b800fa5ddfbaf8dce240563
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: SMB2_TCON needs one dyn byte to that the structure size check works.
    
    Windows generates NT_STATUS_INVALID_PARAMETER otherwise.
    
    metze

commit 85b393a199c633acaec68591c2b3940fdb5fbf99
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: SMB2_WRITE needs one dyn byte to that the structure size check works.
    
    Windows generates NT_STATUS_INVALID_PARAMETER otherwise.
    
    metze

commit 42609036be8068a143169cbf18f42b0ac7f6575f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: SMB2_READ needs one dyn byte to that the structure size check works.
    
    Windows generates NT_STATUS_INVALID_PARAMETER otherwise.
    
    metze

commit fbcba9fa8ff3d8b091016ed4e7d60a30703af50c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: SMB2_QUERY_DIRECTORY needs one dyn byte to that the structure size check works.
    
    Windows generates NT_STATUS_INVALID_PARAMETER otherwise.
    
    metze

commit b57fb1e1a4ec286940f1d165f360af62278e5a8f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: SMB2_CREATE needs one dyn byte to that the structure size check works.
    
    Windows generates NT_STATUS_INVALID_PARAMETER otherwise.
    
    metze

commit 35d4afc3e0a364328e5fd1e3789ec18705c2c482
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Sep 5 18:22:57 2011 +0200

    s3:smb2cli: SMB2_SESSION_SETUP needs one dyn byte to that the structure size check works.
    
    Windows generates NT_STATUS_INVALID_PARAMETER otherwise.
    
    metze

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

Summary of changes:
 source3/libsmb/smb2cli_create.c          |   23 ++++++++++++++++-------
 source3/libsmb/smb2cli_query_directory.c |   13 ++++++++++++-
 source3/libsmb/smb2cli_read.c            |    3 ++-
 source3/libsmb/smb2cli_session.c         |   13 ++++++++++++-
 source3/libsmb/smb2cli_tcon.c            |   13 ++++++++++++-
 source3/libsmb/smb2cli_write.c           |   13 ++++++++++++-
 6 files changed, 66 insertions(+), 12 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/libsmb/smb2cli_create.c b/source3/libsmb/smb2cli_create.c
index ecb220d..2145ce2 100644
--- a/source3/libsmb/smb2cli_create.c
+++ b/source3/libsmb/smb2cli_create.c
@@ -77,12 +77,17 @@ struct tevent_req *smb2cli_create_send(
 	}
 
 	if (!convert_string_talloc(state, CH_UNIX, CH_UTF16,
-				   filename, strlen(filename)+1,
+				   filename, strlen(filename),
 				   &name_utf16, &name_utf16_len)) {
 		tevent_req_oom(req);
 		return tevent_req_post(req, ev);
 	}
 
+	if (strlen(filename) == 0) {
+		TALLOC_FREE(name_utf16);
+		name_utf16_len = 0;
+	}
+
 	fixed = state->fixed;
 
 	SSVAL(fixed, 0, 57);
@@ -109,20 +114,24 @@ struct tevent_req *smb2cli_create_send(
 	blobs_offset = name_utf16_len;
 	blobs_offset = ((blobs_offset + 3) & ~3);
 
-	SIVAL(fixed, 48, blobs_offset + SMB2_HDR_BODY + 56);
-	SIVAL(fixed, 52, blob.length);
+	if (blob.length > 0) {
+		SIVAL(fixed, 48, blobs_offset + SMB2_HDR_BODY + 56);
+		SIVAL(fixed, 52, blob.length);
+	}
 
-	dyn_len = blobs_offset + blob.length;
+	dyn_len = MAX(1, blobs_offset + blob.length);
 	dyn = talloc_zero_array(state, uint8_t, dyn_len);
 	if (tevent_req_nomem(dyn, req)) {
 		return tevent_req_post(req, ev);
 	}
 
-	memcpy(dyn, name_utf16, name_utf16_len);
-	TALLOC_FREE(name_utf16);
+	if (name_utf16) {
+		memcpy(dyn, name_utf16, name_utf16_len);
+		TALLOC_FREE(name_utf16);
+	}
 
 	if (blob.data != NULL) {
-		memcpy(dyn + blobs_offset - (SMB2_HDR_BODY + 56),
+		memcpy(dyn + blobs_offset,
 		       blob.data, blob.length);
 		data_blob_free(&blob);
 	}
diff --git a/source3/libsmb/smb2cli_query_directory.c b/source3/libsmb/smb2cli_query_directory.c
index 3feaa07..4a0e69b 100644
--- a/source3/libsmb/smb2cli_query_directory.c
+++ b/source3/libsmb/smb2cli_query_directory.c
@@ -27,6 +27,7 @@
 
 struct smb2cli_query_directory_state {
 	uint8_t fixed[32];
+	uint8_t dyn_pad[1];
 	struct iovec *recv_iov;
 	uint8_t *data;
 	uint32_t data_length;
@@ -58,12 +59,17 @@ struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
 	}
 
 	if (!convert_string_talloc(state, CH_UNIX, CH_UTF16,
-				   mask, strlen(mask)+1,
+				   mask, strlen(mask),
 				   &dyn, &dyn_len)) {
 		tevent_req_oom(req);
 		return tevent_req_post(req, ev);
 	}
 
+	if (strlen(mask) == 0) {
+		TALLOC_FREE(dyn);
+		dyn_len = 0;
+	}
+
 	fixed = state->fixed;
 	SSVAL(fixed, 0, 33);
 	SCVAL(fixed, 2, level);
@@ -75,6 +81,11 @@ struct tevent_req *smb2cli_query_directory_send(TALLOC_CTX *mem_ctx,
 	SSVAL(fixed, 26, dyn_len);
 	SSVAL(fixed, 28, outbuf_len);
 
+	if (dyn_len == 0) {
+		dyn = state->dyn_pad;
+		dyn_len = sizeof(state->dyn_pad);
+	}
+
 	subreq = smb2cli_req_send(state, ev, cli, SMB2_OP_FIND,
 				  0, 0, /* flags */
 				  cli->smb2.pid,
diff --git a/source3/libsmb/smb2cli_read.c b/source3/libsmb/smb2cli_read.c
index bcdbd87..e45a75f 100644
--- a/source3/libsmb/smb2cli_read.c
+++ b/source3/libsmb/smb2cli_read.c
@@ -27,6 +27,7 @@
 
 struct smb2cli_read_state {
 	uint8_t fixed[48];
+	uint8_t dyn_pad[1];
 	struct iovec *recv_iov;
 	uint8_t *data;
 	uint32_t data_length;
@@ -70,7 +71,7 @@ struct tevent_req *smb2cli_read_send(TALLOC_CTX *mem_ctx,
 				  cli->smb2.tid,
 				  cli->smb2.uid,
 				  state->fixed, sizeof(state->fixed),
-				  NULL, 0);
+				  state->dyn_pad, sizeof(state->dyn_pad));
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/source3/libsmb/smb2cli_session.c b/source3/libsmb/smb2cli_session.c
index b1f7c33..0fd91a8 100644
--- a/source3/libsmb/smb2cli_session.c
+++ b/source3/libsmb/smb2cli_session.c
@@ -30,6 +30,7 @@
 struct smb2cli_sesssetup_blob_state {
 	struct ntlmssp_state *ntlmssp;
 	uint8_t fixed[24];
+	uint8_t dyn_pad[1];
 	uint64_t uid;
 	DATA_BLOB out;
 };
@@ -44,6 +45,8 @@ static struct tevent_req *smb2cli_sesssetup_blob_send(TALLOC_CTX *mem_ctx,
 	struct tevent_req *req, *subreq;
 	struct smb2cli_sesssetup_blob_state *state;
 	uint8_t *buf;
+	uint8_t *dyn;
+	size_t dyn_len;
 
 	req = tevent_req_create(mem_ctx, &state,
 				struct smb2cli_sesssetup_blob_state);
@@ -62,12 +65,20 @@ static struct tevent_req *smb2cli_sesssetup_blob_send(TALLOC_CTX *mem_ctx,
 	SSVAL(buf, 14, blob->length);
 	SBVAL(buf, 16, 0); /* PreviousSessionId */
 
+	if (blob->length > 0) {
+		dyn = blob->data;
+		dyn_len = blob->length;
+	} else {
+		dyn = state->dyn_pad;;
+		dyn_len = sizeof(state->dyn_pad);
+	}
+
 	subreq = smb2cli_req_send(state, ev, cli, SMB2_OP_SESSSETUP,
 				  0, 0, /* flags */
 				  cli->smb2.pid,
 				  0, 0, /* tid, uid */
 				  state->fixed, sizeof(state->fixed),
-				  blob->data, blob->length);
+				  dyn, dyn_len);
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}
diff --git a/source3/libsmb/smb2cli_tcon.c b/source3/libsmb/smb2cli_tcon.c
index 2872c37..8c2c802 100644
--- a/source3/libsmb/smb2cli_tcon.c
+++ b/source3/libsmb/smb2cli_tcon.c
@@ -28,6 +28,7 @@
 struct smb2cli_tcon_state {
 	struct cli_state *cli;
 	uint8_t fixed[8];
+	uint8_t dyn_pad[1];
 };
 
 static void smb2cli_tcon_done(struct tevent_req *subreq);
@@ -59,17 +60,27 @@ struct tevent_req *smb2cli_tcon_send(TALLOC_CTX *mem_ctx,
 		return tevent_req_post(req, ev);
 	}
 	if (!convert_string_talloc(state, CH_UNIX, CH_UTF16,
-				   tcon_share, talloc_get_size(tcon_share),
+				   tcon_share, strlen(tcon_share),
 				   &dyn, &dyn_len)) {
 		tevent_req_oom(req);
 		return tevent_req_post(req, ev);
 	}
 
+	if (strlen(tcon_share) == 0) {
+		TALLOC_FREE(dyn);
+		dyn_len = 0;
+	}
+
 	fixed = state->fixed;
 	SSVAL(fixed, 0, 9);
 	SSVAL(fixed, 4, SMB2_HDR_BODY + 8);
 	SSVAL(fixed, 6, dyn_len);
 
+	if (dyn_len == 0) {
+		dyn = state->dyn_pad;;
+		dyn_len = sizeof(state->dyn_pad);
+	}
+
 	subreq = smb2cli_req_send(state, ev, cli, SMB2_OP_TCON,
 				  0, 0, /* flags */
 				  cli->smb2.pid,
diff --git a/source3/libsmb/smb2cli_write.c b/source3/libsmb/smb2cli_write.c
index 98d754a..d512f00 100644
--- a/source3/libsmb/smb2cli_write.c
+++ b/source3/libsmb/smb2cli_write.c
@@ -27,6 +27,7 @@
 
 struct smb2cli_write_state {
 	uint8_t fixed[48];
+	uint8_t dyn_pad[1];
 };
 
 static void smb2cli_write_done(struct tevent_req *subreq);
@@ -45,6 +46,8 @@ struct tevent_req *smb2cli_write_send(TALLOC_CTX *mem_ctx,
 	struct tevent_req *req, *subreq;
 	struct smb2cli_write_state *state;
 	uint8_t *fixed;
+	const uint8_t *dyn;
+	size_t dyn_len;
 
 	req = tevent_req_create(mem_ctx, &state,
 				struct smb2cli_write_state);
@@ -63,13 +66,21 @@ struct tevent_req *smb2cli_write_send(TALLOC_CTX *mem_ctx,
 	SIVAL(fixed, 36, remaining_bytes);
 	SIVAL(fixed, 44, flags);
 
+	if (length > 0) {
+		dyn = data;
+		dyn_len = length;
+	} else {
+		dyn = state->dyn_pad;;
+		dyn_len = sizeof(state->dyn_pad);
+	}
+
 	subreq = smb2cli_req_send(state, ev, cli, SMB2_OP_WRITE,
 				  0, 0, /* flags */
 				  cli->smb2.pid,
 				  cli->smb2.tid,
 				  cli->smb2.uid,
 				  state->fixed, sizeof(state->fixed),
-				  data, length);
+				  dyn, dyn_len);
 	if (tevent_req_nomem(subreq, req)) {
 		return tevent_req_post(req, ev);
 	}


-- 
Samba Shared Repository


More information about the samba-cvs mailing list