[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