Use 32 bit storage for nttrans counts
authorAmin Azez <azez@ufomechanic.net>
Fri, 7 Mar 2008 10:55:49 +0000 (10:55 +0000)
committerStefan Metzmacher <metze@samba.org>
Fri, 7 Mar 2008 11:10:48 +0000 (12:10 +0100)
Erroneous 16bit storage for nttrans counts meant that nttrans behaved
"strangely" for sizes of over 64K

As 32 bit is used in the SMB message and specified in
http://us4.samba.org/samba/ftp/specs/draft-leach-cifs-v1-spec-02.txt
section 3.13.2
this fix changes storage to match.

Signed-off-by: Amin Azez <azez@ufomechanic.net>
(This used to be commit d66b6c3823f003875e3b7cdf63617a894cceadf9)

source4/smb_server/smb/nttrans.c

index f6edc407d67fc67d68ea3b6b4653afef32d6bd45..a20c41ba4d09334aef5b2b3eca2e1e08468e14bd 100644 (file)
@@ -460,7 +460,7 @@ static NTSTATUS nttrans_backend(struct smbsrv_request *req,
 static void reply_nttrans_send(struct ntvfs_request *ntvfs)
 {
        struct smbsrv_request *req;
-       uint16_t params_left, data_left;
+       uint32_t params_left, data_left;
        uint8_t *params, *data;
        struct smb_nttrans *trans;
        struct nttrans_op *op;
@@ -502,7 +502,7 @@ static void reply_nttrans_send(struct ntvfs_request *ntvfs)
        /* we need to divide up the reply into chunks that fit into
           the negotiated buffer size */
        do {
-               uint16_t this_data, this_param, max_bytes;
+               uint32_t this_data, this_param, max_bytes;
                uint_t align1 = 1, align2 = (params_left ? 2 : 0);
                struct smbsrv_request *this_req;
 
@@ -573,9 +573,9 @@ void smbsrv_reply_nttrans(struct smbsrv_request *req)
 {
        struct nttrans_op *op;
        struct smb_nttrans *trans;
-       uint16_t param_ofs, data_ofs;
-       uint16_t param_count, data_count;
-       uint16_t param_total, data_total;
+       uint32_t param_ofs, data_ofs;
+       uint32_t param_count, data_count;
+       uint32_t param_total, data_total;
 
        /* parse request */
        if (req->in.wct < 19) {