r21183: Commit the big/little endian fix for nttrans setup[] handling.
authorVolker Lendecke <vlendec@samba.org>
Tue, 6 Feb 2007 18:16:10 +0000 (18:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:44:43 +0000 (14:44 -0500)
Please check!

For code symmetry reasons, trans2 might also see this fix, but this is left to
the interested reader :-)

Volker

source/libcli/raw/rawtrans.c
source/smb_server/smb/nttrans.c

index cd309e0736bb9b861f8599b3d444b3e763dc1938..08d7483a872341811caa8c1b4f4bc46331d29fa3 100644 (file)
@@ -555,7 +555,6 @@ struct smbcli_request *smb_raw_nttrans_send(struct smbcli_tree *tree,
 {
        struct smbcli_request *req; 
        uint8_t *outdata, *outparam;
-       int i;
        int align = 0;
 
        /* only align if there are parameters or data */
@@ -592,9 +591,8 @@ struct smbcli_request *smb_raw_nttrans_send(struct smbcli_tree *tree,
        SIVAL(req->out.vwv, 31, PTR_DIFF(outdata,req->out.hdr));
        SCVAL(req->out.vwv, 35, parms->in.setup_count);
        SSVAL(req->out.vwv, 36, parms->in.function);
-       for (i=0;i<parms->in.setup_count;i++) {
-               SSVAL(req->out.vwv,VWV(19+i),parms->in.setup[i]);
-       }
+       memcpy(req->out.vwv + VWV(19), parms->in.setup,
+              sizeof(uint16_t) * parms->in.setup_count);
        if (parms->in.params.length) {
                memcpy(outparam, parms->in.params.data, parms->in.params.length);
        }
index fce4fdc1293a5a1e32254347953495da3d3c6164..e85da29806bb6d70b9bb89adf99329b073ba80b9 100644 (file)
@@ -570,7 +570,6 @@ void smbsrv_reply_nttrans(struct smbsrv_request *req)
 {
        struct nttrans_op *op;
        struct smb_nttrans *trans;
-       int i;
        uint16_t param_ofs, data_ofs;
        uint16_t param_count, data_count;
        uint16_t param_total, data_total;
@@ -617,9 +616,9 @@ void smbsrv_reply_nttrans(struct smbsrv_request *req)
                smbsrv_send_error(req, NT_STATUS_NO_MEMORY);
                return;
        }
-       for (i=0;i<trans->in.setup_count;i++) {
-               trans->in.setup[i] = SVAL(req->in.vwv, VWV(19+i));
-       }
+
+       memcpy(trans->in.setup, (char *)(req->in.vwv) + VWV(19),
+              sizeof(uint16_t) * trans->in.setup_count);
 
        if (!req_pull_blob(req, req->in.hdr + param_ofs, param_count, &trans->in.params) ||
            !req_pull_blob(req, req->in.hdr + data_ofs, data_count, &trans->in.data)) {