r26429: Avoid use of global_smb_iconv_convenience.
[amitay/samba.git] / source4 / libcli / smb2 / request.c
index ef024d53f88f156fafca235c2fc68297458b8d5e..73c74dcfeb6ff234af3764cbef211069435de28e 100644 (file)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,8 +17,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
 #include "libcli/smb2/smb2.h"
 #include "lib/util/dlinklist.h"
 #include "lib/events/events.h"
+#include "libcli/smb2/smb2_calls.h"
+#include "param/param.h"
 
 /*
   initialise a smb2 request
 */
 struct smb2_request *smb2_request_init(struct smb2_transport *transport, uint16_t opcode,
-                                      uint16_t body_fixed_size, BOOL body_dynamic_present,
+                                      uint16_t body_fixed_size, bool body_dynamic_present,
                                       uint32_t body_dynamic_size)
 {
        struct smb2_request *req;
@@ -68,7 +69,7 @@ struct smb2_request *smb2_request_init(struct smb2_transport *transport, uint16_
        req->out.size      = SMB2_HDR_BODY+NBT_HDR_SIZE+body_fixed_size;
 
        req->out.allocated = req->out.size + body_dynamic_size;
-       req->out.buffer    = talloc_size(req, req->out.allocated);
+       req->out.buffer    = talloc_array(req, uint8_t, req->out.allocated);
        if (req->out.buffer == NULL) {
                talloc_free(req);
                return NULL;
@@ -113,7 +114,7 @@ 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, BOOL body_dynamic_present,
+                                           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, 
@@ -157,16 +158,16 @@ NTSTATUS smb2_request_destroy(struct smb2_request *req)
 /*
   receive a response to a packet
 */
-BOOL smb2_request_receive(struct smb2_request *req)
+bool smb2_request_receive(struct smb2_request *req)
 {
        /* req can be NULL when a send has failed. This eliminates lots of NULL
           checks in each module */
-       if (!req) return False;
+       if (!req) return false;
 
        /* keep receiving packets until this one is replied to */
        while (req->state <= SMB2_REQUEST_RECV) {
                if (event_loop_once(req->transport->socket->event.ctx) != 0) {
-                       return False;
+                       return false;
                }
        }
 
@@ -174,13 +175,13 @@ BOOL smb2_request_receive(struct smb2_request *req)
 }
 
 /* Return true if the last packet was in error */
-BOOL smb2_request_is_error(struct smb2_request *req)
+bool smb2_request_is_error(struct smb2_request *req)
 {
        return NT_STATUS_IS_ERR(req->status);
 }
 
 /* Return true if the last packet was OK */
-BOOL smb2_request_is_ok(struct smb2_request *req)
+bool smb2_request_is_ok(struct smb2_request *req)
 {
        return NT_STATUS_IS_OK(req->status);
 }
@@ -188,16 +189,16 @@ BOOL smb2_request_is_ok(struct smb2_request *req)
 /*
   check if a range in the reply body is out of bounds
 */
-BOOL smb2_oob(struct smb2_request_buffer *buf, const uint8_t *ptr, size_t size)
+bool smb2_oob(struct smb2_request_buffer *buf, const uint8_t *ptr, size_t size)
 {
        /* be careful with wraparound! */
        if (ptr < buf->body ||
            ptr >= buf->body + buf->body_size ||
            size > buf->body_size ||
            ptr + size > buf->body + buf->body_size) {
-               return True;
+               return true;
        }
-       return False;
+       return false;
 }
 
 size_t smb2_padding_size(uint32_t offset, size_t n)
@@ -230,7 +231,7 @@ static NTSTATUS smb2_grow_buffer(struct smb2_request_buffer *buf, size_t increas
 
        dynamic_ofs = buf->dynamic - buf->buffer;
 
-       buffer_ptr = talloc_realloc_size(buf, buf->buffer, newsize);
+       buffer_ptr = talloc_realloc(buf, buf->buffer, uint8_t, newsize);
        NT_STATUS_HAVE_NO_MEMORY(buffer_ptr);
 
        buf->buffer     = buffer_ptr;
@@ -579,10 +580,10 @@ NTSTATUS smb2_pull_o16s16_string(struct smb2_request_buffer *buf, TALLOC_CTX *me
                return NT_STATUS_OK;
        }
 
-       size = convert_string_talloc(mem_ctx, CH_UTF16, CH_UNIX, 
+       size = convert_string_talloc(mem_ctx, lp_iconv_convenience(global_loadparm), CH_UTF16, CH_UNIX, 
                                     blob.data, blob.length, &vstr);
        data_blob_free(&blob);
-       (*str) = vstr;
+       (*str) = (char *)vstr;
        if (size == -1) {
                return NT_STATUS_ILLEGAL_CHARACTER;
        }
@@ -604,7 +605,7 @@ NTSTATUS smb2_push_o16s16_string(struct smb2_request_buffer *buf,
                return smb2_push_o16s16_blob(buf, ofs, data_blob(NULL, 0));
        }
 
-       size = convert_string_talloc(buf->buffer, CH_UNIX, CH_UTF16, 
+       size = convert_string_talloc(buf->buffer, lp_iconv_convenience(global_loadparm), CH_UNIX, CH_UTF16, 
                                     str, strlen(str), (void **)&blob.data);
        if (size == -1) {
                return NT_STATUS_ILLEGAL_CHARACTER;