r15532: add a BOOL body_dynamic_present, because the body_dynamic_size can be 0
authorStefan Metzmacher <metze@samba.org>
Thu, 11 May 2006 10:47:37 +0000 (10:47 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:05:54 +0000 (14:05 -0500)
also if the dynamic flag should be set

metze

22 files changed:
source/libcli/smb2/close.c
source/libcli/smb2/create.c
source/libcli/smb2/find.c
source/libcli/smb2/flush.c
source/libcli/smb2/getinfo.c
source/libcli/smb2/ioctl.c
source/libcli/smb2/keepalive.c
source/libcli/smb2/logoff.c
source/libcli/smb2/negprot.c
source/libcli/smb2/read.c
source/libcli/smb2/request.c
source/libcli/smb2/session.c
source/libcli/smb2/setinfo.c
source/libcli/smb2/tcon.c
source/libcli/smb2/tdis.c
source/libcli/smb2/write.c
source/smb_server/smb2/keepalive.c
source/smb_server/smb2/negprot.c
source/smb_server/smb2/receive.c
source/smb_server/smb2/sesssetup.c
source/smb_server/smb2/tcon.c
source/torture/smb2/scan.c

index 3e559fe89318f580ec89249fb51a929fe2f5ba21..4483f3c75ba6273a9dfe96d4ed031c43e8bc6a1a 100644 (file)
@@ -32,7 +32,7 @@ struct smb2_request *smb2_close_send(struct smb2_tree *tree, struct smb2_close *
 {
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_CLOSE, 0x18, 0);
+       req = smb2_request_init_tree(tree, SMB2_OP_CLOSE, 0x18, False, 0);
        if (req == NULL) return NULL;
 
        SSVAL(req->out.body, 0x02, io->in.flags);
index c7bb190559b2a64c1e17838713d7a3ce56ce013d..339258a0dfecb6ec0ceb42cabfdd8455ae731253 100644 (file)
@@ -67,7 +67,7 @@ struct smb2_request *smb2_create_send(struct smb2_tree *tree, struct smb2_create
        NTSTATUS status;
        DATA_BLOB blob = data_blob(NULL, 0);
 
-       req = smb2_request_init_tree(tree, SMB2_OP_CREATE, 0x38, 1);
+       req = smb2_request_init_tree(tree, SMB2_OP_CREATE, 0x38, True, 0);
        if (req == NULL) return NULL;
 
        SSVAL(req->out.body, 0x02, io->in.oplock_flags);
index aa14347022881871d4b5b441e5f59f890bc52584..e811095f423e766d348b8350fb4f36b9050edc18 100644 (file)
@@ -33,7 +33,7 @@ struct smb2_request *smb2_find_send(struct smb2_tree *tree, struct smb2_find *io
        struct smb2_request *req;
        NTSTATUS status;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_FIND, 0x20, 1);
+       req = smb2_request_init_tree(tree, SMB2_OP_FIND, 0x20, True, 0);
        if (req == NULL) return NULL;
 
        SCVAL(req->out.body, 0x02, io->in.level);
index d9178aeb9f83514a41f26a8780e7ff22c77b5d86..596eb260094968c9e44a11ec4073e88308236e60 100644 (file)
@@ -31,7 +31,7 @@ struct smb2_request *smb2_flush_send(struct smb2_tree *tree, struct smb2_flush *
 {
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_FLUSH, 0x18, 0);
+       req = smb2_request_init_tree(tree, SMB2_OP_FLUSH, 0x18, False, 0);
        if (req == NULL) return NULL;
 
        SSVAL(req->out.body, 0x02, 0); /* pad? */
index d52ff03922b6fa98e77c3ab3a672af9ba7e9527d..57a363b63f1e12a681a234b8742854f6a758d340 100644 (file)
@@ -32,7 +32,7 @@ struct smb2_request *smb2_getinfo_send(struct smb2_tree *tree, struct smb2_getin
 {
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_GETINFO, 0x28, 0);
+       req = smb2_request_init_tree(tree, SMB2_OP_GETINFO, 0x28, False, 0);
        if (req == NULL) return NULL;
 
        /* this seems to be a bug, they use 0x29 but only send 0x28 bytes */
index 533f12c9d363a856d5e2369ba4374500e2b754f9..ffe029e16ec718435b7c4ecef786a699a645b597 100644 (file)
@@ -32,7 +32,7 @@ struct smb2_request *smb2_ioctl_send(struct smb2_tree *tree, struct smb2_ioctl *
        NTSTATUS status;
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_IOCTL, 0x38, 
+       req = smb2_request_init_tree(tree, SMB2_OP_IOCTL, 0x38, True,
                                     io->in.in.length+io->in.out.length);
        if (req == NULL) return NULL;
 
index b800bdb3b1b83b3c9476b270dfa12e847abbf83f..ac31afd4dc75f88239092d5899c02d065207e7f5 100644 (file)
@@ -31,7 +31,7 @@ struct smb2_request *smb2_keepalive_send(struct smb2_transport *transport)
 {
        struct smb2_request *req;
 
-       req = smb2_request_init(transport, SMB2_OP_KEEPALIVE, 0x04, 0);
+       req = smb2_request_init(transport, SMB2_OP_KEEPALIVE, 0x04, False, 0);
        if (req == NULL) return NULL;
 
        SSVAL(req->out.body, 0x02, 0);
index 977c1e57affdef19d173854a113a8cc10aa9f37d..cfaa389ef87cae4b61e04d802c755650df2d5328 100644 (file)
@@ -31,7 +31,7 @@ struct smb2_request *smb2_logoff_send(struct smb2_session *session)
 {
        struct smb2_request *req;
 
-       req = smb2_request_init(session->transport, SMB2_OP_LOGOFF, 0x04, 0);
+       req = smb2_request_init(session->transport, SMB2_OP_LOGOFF, 0x04, False, 0);
        if (req == NULL) return NULL;
 
        SBVAL(req->out.hdr,  SMB2_HDR_UID, session->uid);
index a3cf8eb0188c4e261440c1b5c7a9d510bcc694bb..c3b72186a92dba8d840f613c9e2faab3c5520c58 100644 (file)
@@ -33,7 +33,7 @@ struct smb2_request *smb2_negprot_send(struct smb2_transport *transport,
 {
        struct smb2_request *req;
        
-       req = smb2_request_init(transport, SMB2_OP_NEGPROT, 0x26, 0);
+       req = smb2_request_init(transport, SMB2_OP_NEGPROT, 0x26, False, 0);
        if (req == NULL) return NULL;
 
        /* this seems to be a bug, they use 0x24 but the length is 0x26 */
index da2d3bb7c93b936e8aba1ce296caedae9f4d95f4..82e9b13280f87cc6534d085c3aadb5da2a670415 100644 (file)
@@ -31,7 +31,7 @@ struct smb2_request *smb2_read_send(struct smb2_tree *tree, struct smb2_read *io
 {
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_READ, 0x31, 0);
+       req = smb2_request_init_tree(tree, SMB2_OP_READ, 0x31, False, 0);
        if (req == NULL) return NULL;
 
        SSVAL(req->out.body, 0x02, 0); /* pad */
index 2476270d49a2e151254fe922a4071cd2c85eb8b5..136b81e9776407515104888f35cca0f8a7ed95c9 100644 (file)
   initialise a smb2 request
 */
 struct smb2_request *smb2_request_init(struct smb2_transport *transport, uint16_t opcode,
-                                      uint16_t body_fixed_size, uint32_t body_dynamic_size)
+                                      uint16_t body_fixed_size, BOOL body_dynamic_present,
+                                      uint32_t body_dynamic_size)
 {
        struct smb2_request *req;
 
+       if (body_dynamic_present) {
+               if (body_dynamic_size == 0) {
+                       body_dynamic_size = 1;
+               }
+       } else {
+               body_dynamic_size = 0;
+       }
+
        req = talloc(transport, struct smb2_request);
        if (req == NULL) return NULL;
 
@@ -95,10 +104,12 @@ struct smb2_request *smb2_request_init(struct smb2_transport *transport, uint16_
     initialise a smb2 request for tree operations
 */
 struct smb2_request *smb2_request_init_tree(struct smb2_tree *tree, uint16_t opcode,
-                                           uint16_t body_fixed_size, uint32_t body_dynamic_size)
+                                           uint16_t body_fixed_size, BOOL body_dynamic_present,
+                                           uint32_t body_dynamic_size)
 {
        struct smb2_request *req = smb2_request_init(tree->session->transport, opcode, 
-                                                    body_fixed_size, body_dynamic_size);
+                                                    body_fixed_size, body_dynamic_present,
+                                                    body_dynamic_size);
        if (req == NULL) return NULL;
 
        SBVAL(req->out.hdr,  SMB2_HDR_UID, tree->session->uid);
index 1d1b97600a60c47a28cd1dbcb77d4559e160c0d4..83e6d1ae00f47da826a34513294c2dc2eba50646 100644 (file)
@@ -69,7 +69,7 @@ struct smb2_request *smb2_session_setup_send(struct smb2_session *session,
        NTSTATUS status;
        
        req = smb2_request_init(session->transport, SMB2_OP_SESSSETUP, 
-                               0x10, io->in.secblob.length);
+                               0x10, True, io->in.secblob.length);
        if (req == NULL) return NULL;
 
        SBVAL(req->out.hdr,  SMB2_HDR_UID, session->uid);
index c445880440cce43a947e06df6d5b111906ba4f29..432034b13bd1d7078b2444b63f1f5c41da8a1c34 100644 (file)
@@ -33,7 +33,7 @@ struct smb2_request *smb2_setinfo_send(struct smb2_tree *tree, struct smb2_setin
        NTSTATUS status;
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_SETINFO, 0x20, io->in.blob.length);
+       req = smb2_request_init_tree(tree, SMB2_OP_SETINFO, 0x20, True, io->in.blob.length);
        if (req == NULL) return NULL;
 
        SSVAL(req->out.body, 0x02, io->in.level);
index 3fc14075a5c533fa78ccc560cacf8608e6a582ff..8b94936c42674d8f501ddf1694d6a88d7eb8451e 100644 (file)
@@ -54,7 +54,7 @@ struct smb2_request *smb2_tree_connect_send(struct smb2_tree *tree,
        NTSTATUS status;
 
        req = smb2_request_init(tree->session->transport, SMB2_OP_TCON, 
-                               0x08, 1);
+                               0x08, True, 0);
        if (req == NULL) return NULL;
 
        SBVAL(req->out.hdr,  SMB2_HDR_UID, tree->session->uid);
index 9ea58113b3fd0cf4be460da75ff4431cab7c2870..f89e5c8e907b1e3a08d10124ca22897d8dc9f552 100644 (file)
@@ -31,7 +31,7 @@ struct smb2_request *smb2_tdis_send(struct smb2_tree *tree)
 {
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_TDIS, 0x04, 0);
+       req = smb2_request_init_tree(tree, SMB2_OP_TDIS, 0x04, False, 0);
        if (req == NULL) return NULL;
 
        SSVAL(req->out.body, 0x02, 0);
index adf690c1b3c3e9259212e2b3322d6401a6854ecb..1edce3f773810f914fe677e6d7ecf98dfc0086c0 100644 (file)
@@ -32,7 +32,7 @@ struct smb2_request *smb2_write_send(struct smb2_tree *tree, struct smb2_write *
        NTSTATUS status;
        struct smb2_request *req;
 
-       req = smb2_request_init_tree(tree, SMB2_OP_WRITE, 0x30, io->in.data.length);
+       req = smb2_request_init_tree(tree, SMB2_OP_WRITE, 0x30, True, io->in.data.length);
        if (req == NULL) return NULL;
 
        status = smb2_push_o16s32_blob(&req->out, 0x02, io->in.data);
index ca8983d5e2c1c84089b03aa1e4ce3502008bfde2..4994af4a0dbbdd50fc483b1c7279eb6e7eb0378f 100644 (file)
@@ -39,7 +39,7 @@ static void smb2srv_keepalive_send(struct smb2srv_request *req)
                return;
        }
 
-       status = smb2srv_setup_reply(req, 0x04, 0);
+       status = smb2srv_setup_reply(req, 0x04, False, 0);
        if (!NT_STATUS_IS_OK(status)) {
                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
                talloc_free(req);
index 351c9e718fd1de6bba042606cf50cfc3a01e7633..6d180eb1d6fd8caedeeaeb8ca88241c6cb698fba 100644 (file)
@@ -117,7 +117,7 @@ static void smb2srv_negprot_send(struct smb2srv_request *req, struct smb2_negpro
                return;
        }
 
-       status = smb2srv_setup_reply(req, 0x40, io->out.secblob.length);
+       status = smb2srv_setup_reply(req, 0x40, True, io->out.secblob.length);
        if (!NT_STATUS_IS_OK(status)) {
                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
                talloc_free(req);
index e27e622a4a9b1c2e43db5d5b80cba79c463b719e..abd825adcc774c20316594da39a62ec31e13bb01 100644 (file)
@@ -41,8 +41,17 @@ static struct smb2srv_request *smb2srv_init_request(struct smbsrv_connection *sm
        return req;
 }
 
-NTSTATUS smb2srv_setup_reply(struct smb2srv_request *req, uint_t body_fixed_size, size_t body_dynamic_size)
+NTSTATUS smb2srv_setup_reply(struct smb2srv_request *req, uint16_t body_fixed_size,
+                            BOOL body_dynamic_present, uint32_t body_dynamic_size)
 {
+       if (body_dynamic_present) {
+               if (body_dynamic_size == 0) {
+                       body_dynamic_size = 1;
+               }
+       } else {
+               body_dynamic_size = 0;
+       }
+
        req->out.size           = SMB2_HDR_BODY+NBT_HDR_SIZE+body_fixed_size;
 
        req->out.allocated      = req->out.size + body_dynamic_size;
@@ -103,7 +112,7 @@ void smb2srv_send_error(struct smb2srv_request *req, NTSTATUS error)
 {
        NTSTATUS status;
 
-       status = smb2srv_setup_reply(req, 8, 1);
+       status = smb2srv_setup_reply(req, 8, True, 0);
        if (!NT_STATUS_IS_OK(status)) {
                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
                talloc_free(req);
index 6d94d431551cb0941153c2a1f506ef7f9b7a050d..a5b9cf50bd905cfd88b93adeb151fa518b93d99d 100644 (file)
@@ -126,7 +126,7 @@ static void smb2srv_sesssetup_send(struct smb2srv_request *req, struct smb2_sess
                return;
        }
 
-       status = smb2srv_setup_reply(req, 0x08, io->out.secblob.length);
+       status = smb2srv_setup_reply(req, 0x08, True, io->out.secblob.length);
        if (!NT_STATUS_IS_OK(status)) {
                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
                talloc_free(req);
@@ -199,7 +199,7 @@ static void smb2srv_logoff_send(struct smb2srv_request *req)
                return;
        }
 
-       status = smb2srv_setup_reply(req, 0x04, 0);
+       status = smb2srv_setup_reply(req, 0x04, False, 0);
        if (!NT_STATUS_IS_OK(status)) {
                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
                talloc_free(req);
index 8d6c002d5074902f9faa8f6b3d7c848cd6b7b467..ba7758b3621dfea59603ff24598d840dd65798f2 100644 (file)
@@ -54,7 +54,7 @@ static void smb2srv_tcon_send(struct smb2srv_request *req, struct smb2_tree_conn
                return;
        }
 
-       status = smb2srv_setup_reply(req, 0x10, 0);
+       status = smb2srv_setup_reply(req, 0x10, False, 0);
        if (!NT_STATUS_IS_OK(status)) {
                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
                talloc_free(req);
@@ -122,7 +122,7 @@ static void smb2srv_tdis_send(struct smb2srv_request *req)
                return;
        }
 
-       status = smb2srv_setup_reply(req, 0x04, 0);
+       status = smb2srv_setup_reply(req, 0x04, False, 0);
        if (!NT_STATUS_IS_OK(status)) {
                smbsrv_terminate_connection(req->smb_conn, nt_errstr(status));
                talloc_free(req);
index 28e83541c7c40e2d6f28acb74f2c0bff3b602f65..8e339c40805f973ced107efcf5c0e99f5a044a5f 100644 (file)
@@ -219,7 +219,7 @@ BOOL torture_smb2_scan(struct torture_context *torture)
        tree->session->transport->options.timeout = 3;
 
        for (opcode=0;opcode<1000;opcode++) {
-               req = smb2_request_init_tree(tree, opcode, 2, 0);
+               req = smb2_request_init_tree(tree, opcode, 2, False, 0);
                SSVAL(req->out.body, 0, 0);
                smb2_transport_send(req);
                if (!smb2_request_receive(req)) {