Author: vlendec
Date: 2007-08-02 18:13:57 +0000 (Thu, 02 Aug 2007)
New Revision: 24134

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=24134

Log:
talloc smb_request for handle_trans2

When starting to convert the individual trans2 subcalls, I need the new
API conventions to be present there. This means that those calls fill in
req->outbuf when there's something to ship

Modified:
   branches/SAMBA_3_2/source/smbd/trans2.c


Changeset:
Modified: branches/SAMBA_3_2/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_2/source/smbd/trans2.c     2007-08-02 18:06:45 UTC (rev 
24133)
+++ branches/SAMBA_3_2/source/smbd/trans2.c     2007-08-02 18:13:57 UTC (rev 
24134)
@@ -6882,11 +6882,22 @@
        if ((state->received_param == state->total_param) &&
            (state->received_data == state->total_data)) {
 
-               struct smb_request req;
-               init_smb_request(&req, (uint8 *)inbuf);
+               struct smb_request *req;
 
-               outsize = handle_trans2(conn, &req, state, inbuf, outbuf,
+               if (!(req = talloc(tmp_talloc_ctx(), struct smb_request))) {
+                       END_PROFILE(SMBtrans2);
+                       return ERROR_NT(NT_STATUS_NO_MEMORY);
+               }
+
+               init_smb_request(req, (uint8 *)inbuf);
+
+               outsize = handle_trans2(conn, req, state, inbuf, outbuf,
                                        size, bufsize);
+               if (req->outbuf != NULL) {
+                       outsize = smb_len(req->outbuf) + 4;
+                       memcpy(outbuf, req->outbuf, outsize);
+               }
+               TALLOC_FREE(req);
                SAFE_FREE(state->data);
                SAFE_FREE(state->param);
                TALLOC_FREE(state);
@@ -6924,7 +6935,7 @@
        int outsize = 0;
        unsigned int pcnt,poff,dcnt,doff,pdisp,ddisp;
        struct trans_state *state;
-       struct smb_request req;
+       struct smb_request *req;
 
        START_PROFILE(SMBtranss2);
 
@@ -7010,10 +7021,20 @@
         */
        SCVAL(outbuf,smb_com,SMBtrans2);
 
-       init_smb_request(&req, (uint8 *)inbuf);
+       if (!(req = talloc(tmp_talloc_ctx(), struct smb_request))) {
+               END_PROFILE(SMBtranss2);
+               return ERROR_NT(NT_STATUS_NO_MEMORY);
+       }
 
-       outsize = handle_trans2(conn, &req, state, inbuf, outbuf, size,
+       init_smb_request(req, (uint8 *)inbuf);
+
+       outsize = handle_trans2(conn, req, state, inbuf, outbuf, size,
                                bufsize);
+       if (req->outbuf != NULL) {
+               outsize = smb_len(req->outbuf) + 4;
+               memcpy(outbuf, req->outbuf, outsize);
+       }
+       TALLOC_FREE(req);
 
        DLIST_REMOVE(conn->pending_trans, state);
        SAFE_FREE(state->data);

Reply via email to