[SCM] Samba Shared Repository - branch master updated
Stefan Metzmacher
metze at samba.org
Wed Sep 7 04:16:04 MDT 2011
The branch, master has been updated
via 9bc4dec s3:smb2_server: return OBJECT_NAME_INVALID if the path is terminated in SMB2_FIND/QUERY_DIRECTORY
via 1bc93c2 s3:smb2_server: return OBJECT_NAME_INVALID if the path is terminated in SMB2_CREATE
via 68b33aa s3:smb2_server: return BAD_NETWORK_NAME if the path is terminated in SMB2_TCON
via 1a726b8 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_write.c
via 3643a05 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_setinfo.c
via f3a8d65 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_read.c
via c648036 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_notify.c
via a358eee s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_lock.c
via 22d479f s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_keepalive.c
via 29b3601 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_ioctl.c
via 880eafd s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_getinfo.c
via 440f702 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_flush.c
via bc95ab9 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_find.c
via 251815b s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_create.c
via e09b394 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_close.c
via 9da2f72 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_break.c
via 02f7c37 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_tcon.c
via d280d9f s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_sesssetup.c
via 7ec3a35 s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_negprot.c
via 6985a13 s3:smb2_server: add smbd_smb2_request_verify_sizes()
via fcd0c0e s3:torture: relax TRANS2 midmight time checking
via fce8ef6 s4:torture/basic: relax base.trans2 midmight time checking
from 674f9cc s3:smb2cli: fix marshalling of smb2_create_blobs in smb2cli_create()
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 9bc4decc1cba701926fc8081c3903aac754a6f51
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:14:52 2011 +0200
s3:smb2_server: return OBJECT_NAME_INVALID if the path is terminated in SMB2_FIND/QUERY_DIRECTORY
metze
Autobuild-User: Stefan Metzmacher <metze at samba.org>
Autobuild-Date: Wed Sep 7 12:15:51 CEST 2011 on sn-devel-104
commit 1bc93c2605e14104237bb100db1d8acb1e7fe389
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:14:52 2011 +0200
s3:smb2_server: return OBJECT_NAME_INVALID if the path is terminated in SMB2_CREATE
metze
commit 68b33aa61ac393c2737969f8449adce3e3096d73
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:14:52 2011 +0200
s3:smb2_server: return BAD_NETWORK_NAME if the path is terminated in SMB2_TCON
metze
commit 1a726b88ec74962d0317740bbdf576ddcffb52bc
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_write.c
metze
commit 3643a05ba63ac5d8466dc8391b5d05efeedb5ac4
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_setinfo.c
metze
commit f3a8d65bdfe496f080a74eb7104500bd8e2b0179
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_read.c
metze
commit c6480366e551d1dc683c2648bd897bdc7c1b90df
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_notify.c
metze
commit a358eee2d8670d4a1675e82562fa704fa45a71e6
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_lock.c
metze
commit 22d479f75794b7c5fcac2fd47fbfd767700507d6
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_keepalive.c
metze
commit 29b3601c028b8861102b1d988285c78fc17f3b8e
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_ioctl.c
metze
commit 880eafd7e83ba326be7036605179e8de746f4312
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_getinfo.c
metze
commit 440f702aa9a020f8cfe13037b7af1ba0dadf86f2
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_flush.c
metze
commit bc95ab99dc84fa6d567a7d4e803552363bbc07a9
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_find.c
metze
commit 251815bfd395398857cb60c0b89710ddce7ab19f
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_create.c
metze
commit e09b3940a769806dcc17d24079375f5d53eca26a
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_close.c
metze
commit 9da2f72d471460d9c953e9cee84c9cfa3611e89e
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_break.c
metze
commit 02f7c37e671c7950619c000b73c5a09ce31c68ac
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_tcon.c
metze
commit d280d9f945be2d658694c6d4503822e99dc953b5
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_sesssetup.c
metze
commit 7ec3a35d2a67ca93a49094f07a12b0e37cec1661
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:01:43 2011 +0200
s3:smb2_server: use smbd_smb2_request_verify_sizes() in smb2_negprot.c
metze
commit 6985a1378bc9b548694ad7d434fd8f6a3f7b2c29
Author: Stefan Metzmacher <metze at samba.org>
Date: Tue Sep 6 14:00:04 2011 +0200
s3:smb2_server: add smbd_smb2_request_verify_sizes()
metze
commit fcd0c0e19ea039edb968d9ddaf6c1350dca596b8
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Sep 7 10:32:53 2011 +0200
s3:torture: relax TRANS2 midmight time checking
It's possible that the test runs on a full hour, e.g. Tue Sep 6 03:00:00 2011.
So better check that the a_time is different from the current time.
metze
commit fce8ef69d352c16a5a9781c7a3288d153da3b32b
Author: Stefan Metzmacher <metze at samba.org>
Date: Wed Sep 7 10:32:53 2011 +0200
s4:torture/basic: relax base.trans2 midmight time checking
It's possible that the test runs on a full hour, e.g. Tue Sep 6 03:00:00 2011.
So better check that the a_time is different from the current time.
metze
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/globals.h | 3 ++
source3/smbd/smb2_break.c | 16 +++-----------
source3/smbd/smb2_close.c | 15 ++-----------
source3/smbd/smb2_create.c | 23 +++++++++++----------
source3/smbd/smb2_find.c | 26 ++++++++++++------------
source3/smbd/smb2_flush.c | 16 +++-----------
source3/smbd/smb2_getinfo.c | 18 ++++------------
source3/smbd/smb2_ioctl.c | 18 ++++------------
source3/smbd/smb2_keepalive.c | 17 +++------------
source3/smbd/smb2_lock.c | 16 ++++----------
source3/smbd/smb2_negprot.c | 14 +++---------
source3/smbd/smb2_notify.c | 16 +++-----------
source3/smbd/smb2_read.c | 16 ++++----------
source3/smbd/smb2_server.c | 42 +++++++++++++++++++++++++++++++++++++++++
source3/smbd/smb2_sesssetup.c | 35 ++++++++-------------------------
source3/smbd/smb2_setinfo.c | 18 ++++------------
source3/smbd/smb2_tcon.c | 40 +++++++++++++++-----------------------
source3/smbd/smb2_write.c | 18 +++++-----------
source3/torture/torture.c | 6 +++-
source4/torture/basic/base.c | 6 +++-
20 files changed, 157 insertions(+), 222 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/globals.h b/source3/smbd/globals.h
index 6ce9835..92532c2 100644
--- a/source3/smbd/globals.h
+++ b/source3/smbd/globals.h
@@ -269,6 +269,9 @@ NTSTATUS smbd_smb2_request_pending_queue(struct smbd_smb2_request *req,
struct smb_request *smbd_smb2_fake_smb_request(struct smbd_smb2_request *req);
void remove_smb2_chained_fsp(files_struct *fsp);
+NTSTATUS smbd_smb2_request_verify_sizes(struct smbd_smb2_request *req,
+ size_t expected_body_size);
+
NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_process_sesssetup(struct smbd_smb2_request *req);
NTSTATUS smbd_smb2_request_process_logoff(struct smbd_smb2_request *req);
diff --git a/source3/smbd/smb2_break.c b/source3/smbd/smb2_break.c
index 5d5ab41..ce583ac 100644
--- a/source3/smbd/smb2_break.c
+++ b/source3/smbd/smb2_break.c
@@ -36,28 +36,20 @@ static NTSTATUS smbd_smb2_oplock_break_recv(struct tevent_req *req,
static void smbd_smb2_request_oplock_break_done(struct tevent_req *subreq);
NTSTATUS smbd_smb2_request_process_break(struct smbd_smb2_request *req)
{
- const uint8_t *inhdr;
+ NTSTATUS status;
const uint8_t *inbody;
int i = req->current_idx;
- size_t expected_body_size = 0x18;
- size_t body_size;
uint8_t in_oplock_level;
uint64_t in_file_id_persistent;
uint64_t in_file_id_volatile;
struct tevent_req *subreq;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x18);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_oplock_level = CVAL(inbody, 0x02);
if (in_oplock_level != SMB2_OPLOCK_LEVEL_NONE &&
diff --git a/source3/smbd/smb2_close.c b/source3/smbd/smb2_close.c
index 93ce5ba..ffe08cc 100644
--- a/source3/smbd/smb2_close.c
+++ b/source3/smbd/smb2_close.c
@@ -30,30 +30,21 @@ static NTSTATUS smbd_smb2_close(struct smbd_smb2_request *req,
NTSTATUS smbd_smb2_request_process_close(struct smbd_smb2_request *req)
{
- const uint8_t *inhdr;
const uint8_t *inbody;
int i = req->current_idx;
uint8_t *outhdr;
DATA_BLOB outbody;
- size_t expected_body_size = 0x18;
- size_t body_size;
uint16_t in_flags;
uint64_t in_file_id_persistent;
uint64_t in_file_id_volatile;
NTSTATUS status;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x18);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
outbody = data_blob_talloc(req->out.vector, NULL, 0x3C);
if (outbody.data == NULL) {
return smbd_smb2_request_error(req, NT_STATUS_NO_MEMORY);
diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
index 9a60fda..fad80a2 100644
--- a/source3/smbd/smb2_create.c
+++ b/source3/smbd/smb2_create.c
@@ -100,8 +100,6 @@ NTSTATUS smbd_smb2_request_process_create(struct smbd_smb2_request *smb2req)
{
const uint8_t *inbody;
int i = smb2req->current_idx;
- size_t expected_body_size = 0x39;
- size_t body_size;
uint8_t in_oplock_level;
uint32_t in_impersonation_level;
uint32_t in_desired_access;
@@ -127,17 +125,12 @@ NTSTATUS smbd_smb2_request_process_create(struct smbd_smb2_request *smb2req)
bool ok;
struct tevent_req *tsubreq;
- if (smb2req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(smb2req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(smb2req, 0x39);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(smb2req, status);
}
-
inbody = (const uint8_t *)smb2req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(smb2req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_oplock_level = CVAL(inbody, 0x03);
in_impersonation_level = IVAL(inbody, 0x04);
in_desired_access = IVAL(inbody, 0x18);
@@ -158,7 +151,7 @@ NTSTATUS smbd_smb2_request_process_create(struct smbd_smb2_request *smb2req)
* overlap
*/
- dyn_offset = SMB2_HDR_BODY + (body_size & 0xFFFFFFFE);
+ dyn_offset = SMB2_HDR_BODY + smb2req->in.vector[i+1].iov_len;
if (in_name_offset == 0 && in_name_length == 0) {
/* This is ok */
@@ -219,6 +212,14 @@ NTSTATUS smbd_smb2_request_process_create(struct smbd_smb2_request *smb2req)
return smbd_smb2_request_error(smb2req, NT_STATUS_ILLEGAL_CHARACTER);
}
+ if (in_name_buffer.length == 0) {
+ in_name_string_size = 0;
+ }
+
+ if (strlen(in_name_string) != in_name_string_size) {
+ return smbd_smb2_request_error(smb2req, NT_STATUS_OBJECT_NAME_INVALID);
+ }
+
ZERO_STRUCT(in_context_blobs);
status = smb2_create_blob_parse(smb2req, in_context_buffer, &in_context_blobs);
if (!NT_STATUS_IS_OK(status)) {
diff --git a/source3/smbd/smb2_find.c b/source3/smbd/smb2_find.c
index 9fc8f1f..6c68810 100644
--- a/source3/smbd/smb2_find.c
+++ b/source3/smbd/smb2_find.c
@@ -41,11 +41,9 @@ static NTSTATUS smbd_smb2_find_recv(struct tevent_req *req,
static void smbd_smb2_request_find_done(struct tevent_req *subreq);
NTSTATUS smbd_smb2_request_process_find(struct smbd_smb2_request *req)
{
- const uint8_t *inhdr;
+ NTSTATUS status;
const uint8_t *inbody;
int i = req->current_idx;
- size_t expected_body_size = 0x21;
- size_t body_size;
uint8_t in_file_info_class;
uint8_t in_flags;
uint32_t in_file_index;
@@ -60,18 +58,12 @@ NTSTATUS smbd_smb2_request_process_find(struct smbd_smb2_request *req)
struct tevent_req *subreq;
bool ok;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x21);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_file_info_class = CVAL(inbody, 0x02);
in_flags = CVAL(inbody, 0x03);
in_file_index = IVAL(inbody, 0x04);
@@ -84,7 +76,7 @@ NTSTATUS smbd_smb2_request_process_find(struct smbd_smb2_request *req)
if (in_file_name_offset == 0 && in_file_name_length == 0) {
/* This is ok */
} else if (in_file_name_offset !=
- (SMB2_HDR_BODY + (body_size & 0xFFFFFFFE))) {
+ (SMB2_HDR_BODY + req->in.vector[i+1].iov_len)) {
return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
}
@@ -115,6 +107,14 @@ NTSTATUS smbd_smb2_request_process_find(struct smbd_smb2_request *req)
return smbd_smb2_request_error(req, NT_STATUS_ILLEGAL_CHARACTER);
}
+ if (in_file_name_buffer.length == 0) {
+ in_file_name_string_size = 0;
+ }
+
+ if (strlen(in_file_name_string) != in_file_name_string_size) {
+ return smbd_smb2_request_error(req, NT_STATUS_OBJECT_NAME_INVALID);
+ }
+
if (req->compat_chain_fsp) {
/* skip check */
} else if (in_file_id_persistent != in_file_id_volatile) {
diff --git a/source3/smbd/smb2_flush.c b/source3/smbd/smb2_flush.c
index c3f5a30..9b00eb2 100644
--- a/source3/smbd/smb2_flush.c
+++ b/source3/smbd/smb2_flush.c
@@ -33,27 +33,19 @@ static NTSTATUS smbd_smb2_flush_recv(struct tevent_req *req);
static void smbd_smb2_request_flush_done(struct tevent_req *subreq);
NTSTATUS smbd_smb2_request_process_flush(struct smbd_smb2_request *req)
{
- const uint8_t *inhdr;
+ NTSTATUS status;
const uint8_t *inbody;
int i = req->current_idx;
- size_t expected_body_size = 0x18;
- size_t body_size;
uint64_t in_file_id_persistent;
uint64_t in_file_id_volatile;
struct tevent_req *subreq;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x18);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_file_id_persistent = BVAL(inbody, 0x08);
in_file_id_volatile = BVAL(inbody, 0x10);
diff --git a/source3/smbd/smb2_getinfo.c b/source3/smbd/smb2_getinfo.c
index 3c8c690..61e0cfa 100644
--- a/source3/smbd/smb2_getinfo.c
+++ b/source3/smbd/smb2_getinfo.c
@@ -44,11 +44,9 @@ static NTSTATUS smbd_smb2_getinfo_recv(struct tevent_req *req,
static void smbd_smb2_request_getinfo_done(struct tevent_req *subreq);
NTSTATUS smbd_smb2_request_process_getinfo(struct smbd_smb2_request *req)
{
- const uint8_t *inhdr;
+ NTSTATUS status;
const uint8_t *inbody;
int i = req->current_idx;
- size_t expected_body_size = 0x29;
- size_t body_size;
uint8_t in_info_type;
uint8_t in_file_info_class;
uint32_t in_output_buffer_length;
@@ -61,18 +59,12 @@ NTSTATUS smbd_smb2_request_process_getinfo(struct smbd_smb2_request *req)
uint64_t in_file_id_volatile;
struct tevent_req *subreq;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x29);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_info_type = CVAL(inbody, 0x02);
in_file_info_class = CVAL(inbody, 0x03);
in_output_buffer_length = IVAL(inbody, 0x04);
@@ -87,7 +79,7 @@ NTSTATUS smbd_smb2_request_process_getinfo(struct smbd_smb2_request *req)
if (in_input_buffer_offset == 0 && in_input_buffer_length == 0) {
/* This is ok */
} else if (in_input_buffer_offset !=
- (SMB2_HDR_BODY + (body_size & 0xFFFFFFFE))) {
+ (SMB2_HDR_BODY + req->in.vector[i+1].iov_len)) {
return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
}
diff --git a/source3/smbd/smb2_ioctl.c b/source3/smbd/smb2_ioctl.c
index abb1905..491c3fd 100644
--- a/source3/smbd/smb2_ioctl.c
+++ b/source3/smbd/smb2_ioctl.c
@@ -41,11 +41,9 @@ static NTSTATUS smbd_smb2_ioctl_recv(struct tevent_req *req,
static void smbd_smb2_request_ioctl_done(struct tevent_req *subreq);
NTSTATUS smbd_smb2_request_process_ioctl(struct smbd_smb2_request *req)
{
- const uint8_t *inhdr;
+ NTSTATUS status;
const uint8_t *inbody;
int i = req->current_idx;
- size_t expected_body_size = 0x39;
- size_t body_size;
uint32_t in_ctl_code;
uint64_t in_file_id_persistent;
uint64_t in_file_id_volatile;
@@ -56,18 +54,12 @@ NTSTATUS smbd_smb2_request_process_ioctl(struct smbd_smb2_request *req)
uint32_t in_flags;
struct tevent_req *subreq;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x39);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_ctl_code = IVAL(inbody, 0x04);
in_file_id_persistent = BVAL(inbody, 0x08);
in_file_id_volatile = BVAL(inbody, 0x10);
@@ -76,7 +68,7 @@ NTSTATUS smbd_smb2_request_process_ioctl(struct smbd_smb2_request *req)
in_max_output_length = IVAL(inbody, 0x2C);
in_flags = IVAL(inbody, 0x30);
- if (in_input_offset != (SMB2_HDR_BODY + (body_size & 0xFFFFFFFE))) {
+ if (in_input_offset != (SMB2_HDR_BODY + req->in.vector[i+1].iov_len)) {
return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
}
diff --git a/source3/smbd/smb2_keepalive.c b/source3/smbd/smb2_keepalive.c
index a830260..24a4f8e 100644
--- a/source3/smbd/smb2_keepalive.c
+++ b/source3/smbd/smb2_keepalive.c
@@ -25,21 +25,12 @@
NTSTATUS smbd_smb2_request_process_keepalive(struct smbd_smb2_request *req)
{
- const uint8_t *inbody;
- int i = req->current_idx;
DATA_BLOB outbody;
- size_t expected_body_size = 0x04;
- size_t body_size;
+ NTSTATUS status;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
- inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
-
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x04);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
/* TODO: update some time stamps */
diff --git a/source3/smbd/smb2_lock.c b/source3/smbd/smb2_lock.c
index 5d615e1..ed1d688 100644
--- a/source3/smbd/smb2_lock.c
+++ b/source3/smbd/smb2_lock.c
@@ -58,8 +58,6 @@ NTSTATUS smbd_smb2_request_process_lock(struct smbd_smb2_request *req)
const uint8_t *inhdr;
const uint8_t *inbody;
const int i = req->current_idx;
- size_t expected_body_size = 0x30;
- size_t body_size;
uint32_t in_smbpid;
uint16_t in_lock_count;
uint64_t in_file_id_persistent;
@@ -68,19 +66,15 @@ NTSTATUS smbd_smb2_request_process_lock(struct smbd_smb2_request *req)
struct tevent_req *subreq;
const uint8_t *lock_buffer;
uint16_t l;
+ NTSTATUS status;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x30);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
+ inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_smbpid = IVAL(inhdr, SMB2_HDR_PID);
in_lock_count = CVAL(inbody, 0x02);
diff --git a/source3/smbd/smb2_negprot.c b/source3/smbd/smb2_negprot.c
index 56a30d0..15bff82 100644
--- a/source3/smbd/smb2_negprot.c
+++ b/source3/smbd/smb2_negprot.c
@@ -80,6 +80,7 @@ void reply_smb20ff(struct smb_request *req, uint16_t choice)
NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
{
+ NTSTATUS status;
const uint8_t *inbody;
const uint8_t *indyn = NULL;
int i = req->current_idx;
@@ -88,8 +89,6 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
DATA_BLOB negprot_spnego_blob;
uint16_t security_offset;
DATA_BLOB security_buffer;
- size_t expected_body_size = 0x24;
- size_t body_size;
size_t expected_dyn_size = 0;
size_t c;
uint16_t security_mode;
@@ -104,17 +103,12 @@ NTSTATUS smbd_smb2_request_process_negprot(struct smbd_smb2_request *req)
/* TODO: drop the connection with INVALID_PARAMETER */
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x24);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
dialect_count = SVAL(inbody, 0x02);
if (dialect_count == 0) {
return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
diff --git a/source3/smbd/smb2_notify.c b/source3/smbd/smb2_notify.c
index 9e377ce..a8b1eb4 100644
--- a/source3/smbd/smb2_notify.c
+++ b/source3/smbd/smb2_notify.c
@@ -47,11 +47,9 @@ static NTSTATUS smbd_smb2_notify_recv(struct tevent_req *req,
static void smbd_smb2_request_notify_done(struct tevent_req *subreq);
NTSTATUS smbd_smb2_request_process_notify(struct smbd_smb2_request *req)
{
- const uint8_t *inhdr;
+ NTSTATUS status;
const uint8_t *inbody;
int i = req->current_idx;
- size_t expected_body_size = 0x20;
- size_t body_size;
uint16_t in_flags;
uint32_t in_output_buffer_length;
uint64_t in_file_id_persistent;
@@ -59,18 +57,12 @@ NTSTATUS smbd_smb2_request_process_notify(struct smbd_smb2_request *req)
uint64_t in_completion_filter;
struct tevent_req *subreq;
- inhdr = (const uint8_t *)req->in.vector[i+0].iov_base;
- if (req->in.vector[i+1].iov_len != (expected_body_size & 0xFFFFFFFE)) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ status = smbd_smb2_request_verify_sizes(req, 0x20);
+ if (!NT_STATUS_IS_OK(status)) {
+ return smbd_smb2_request_error(req, status);
}
-
inbody = (const uint8_t *)req->in.vector[i+1].iov_base;
- body_size = SVAL(inbody, 0x00);
- if (body_size != expected_body_size) {
- return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
- }
-
in_flags = SVAL(inbody, 0x02);
in_output_buffer_length = IVAL(inbody, 0x04);
in_file_id_persistent = BVAL(inbody, 0x08);
diff --git a/source3/smbd/smb2_read.c b/source3/smbd/smb2_read.c
index 8c3a8fd..99f6e7a 100644
--- a/source3/smbd/smb2_read.c
+++ b/source3/smbd/smb2_read.c
@@ -44,11 +44,10 @@ static NTSTATUS smbd_smb2_read_recv(struct tevent_req *req,
static void smbd_smb2_request_read_done(struct tevent_req *subreq);
NTSTATUS smbd_smb2_request_process_read(struct smbd_smb2_request *req)
{
+ NTSTATUS status;
--
Samba Shared Repository
More information about the samba-cvs
mailing list