Author: vlendec
Date: 2007-08-14 08:44:00 +0000 (Tue, 14 Aug 2007)
New Revision: 24403

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

Log:
Remove reply_prep_legacy from send_nttrans_replies
Modified:
   branches/SAMBA_3_2/source/smbd/nttrans.c


Changeset:
Modified: branches/SAMBA_3_2/source/smbd/nttrans.c
===================================================================
--- branches/SAMBA_3_2/source/smbd/nttrans.c    2007-08-14 08:29:36 UTC (rev 
24402)
+++ branches/SAMBA_3_2/source/smbd/nttrans.c    2007-08-14 08:44:00 UTC (rev 
24403)
@@ -80,36 +80,14 @@
        int alignment_offset = 3;
        int data_alignment_offset = 0;
 
-       /*
-        * Initially set the wcnt area to be 18 - this is true for all
-        * transNT replies.
-        */
-
-       char *inbuf, *outbuf;
-       int length, bufsize;
-
-       if (!reply_prep_legacy(req, &inbuf, &outbuf, &length, &bufsize)) {
-               reply_nterror(req, NT_STATUS_NO_MEMORY);
-               return;
-       }
-
-       set_message(inbuf,outbuf,18,0,True);
-
-       if (NT_STATUS_V(nt_error)) {
-               ERROR_NT(nt_error);
-       }
-
        /* 
         * If there genuinely are no parameters or data to send just send
         * the empty packet.
         */
 
        if(params_to_send == 0 && data_to_send == 0) {
-               show_msg(outbuf);
-               if (!send_smb(smbd_server_fd(),outbuf)) {
-                       exit_server_cleanly("send_nt_replies: send_smb 
failed.");
-               }
-               TALLOC_FREE(req->outbuf);
+               reply_outbuf(req, 18, 0);
+               show_msg((char *)req->outbuf);
                return;
        }
 
@@ -130,9 +108,10 @@
         * NT needs this to work correctly.
         */
 
-       useable_space = bufsize - ((smb_buf(outbuf)+
-                               alignment_offset+data_alignment_offset) -
-                               outbuf);
+       useable_space = max_send - (smb_size
+                                   + 2 * 18 /* wct */
+                                   + alignment_offset
+                                   + data_alignment_offset);
 
        /*
         * useable_space can never be more than max_send minus the
@@ -158,14 +137,14 @@
 
                total_sent_thistime = MIN(total_sent_thistime, useable_space);
 
-               set_message(inbuf,outbuf, 18, total_sent_thistime, True);
+               reply_outbuf(req, 18, total_sent_thistime);
 
                /*
                 * Set total params and data to be sent.
                 */
 
-               SIVAL(outbuf,smb_ntr_TotalParameterCount,paramsize);
-               SIVAL(outbuf,smb_ntr_TotalDataCount,datasize);
+               SIVAL(req->outbuf,smb_ntr_TotalParameterCount,paramsize);
+               SIVAL(req->outbuf,smb_ntr_TotalDataCount,datasize);
 
                /* 
                 * Calculate how many parameters and data we can fit into
@@ -176,11 +155,12 @@
                data_sent_thistime = useable_space - params_sent_thistime;
                data_sent_thistime = MIN(data_sent_thistime,data_to_send);
 
-               SIVAL(outbuf,smb_ntr_ParameterCount,params_sent_thistime);
+               SIVAL(req->outbuf, smb_ntr_ParameterCount,
+                     params_sent_thistime);
 
                if(params_sent_thistime == 0) {
-                       SIVAL(outbuf,smb_ntr_ParameterOffset,0);
-                       SIVAL(outbuf,smb_ntr_ParameterDisplacement,0);
+                       SIVAL(req->outbuf,smb_ntr_ParameterOffset,0);
+                       SIVAL(req->outbuf,smb_ntr_ParameterDisplacement,0);
                } else {
                        /*
                         * smb_ntr_ParameterOffset is the offset from the start 
of the SMB header to the
@@ -189,33 +169,37 @@
                         * them from the calculation.
                         */
 
-                       SIVAL(outbuf,smb_ntr_ParameterOffset,
-                               ((smb_buf(outbuf)+alignment_offset) - 
smb_base(outbuf)));
+                       SIVAL(req->outbuf,smb_ntr_ParameterOffset,
+                             ((smb_buf(req->outbuf)+alignment_offset)
+                              - smb_base(req->outbuf)));
                        /* 
                         * Absolute displacement of param bytes sent in this 
packet.
                         */
 
-                       SIVAL(outbuf,smb_ntr_ParameterDisplacement,pp - params);
+                       SIVAL(req->outbuf, smb_ntr_ParameterDisplacement,
+                             pp - params);
                }
 
                /*
                 * Deal with the data portion.
                 */
 
-               SIVAL(outbuf,smb_ntr_DataCount, data_sent_thistime);
+               SIVAL(req->outbuf, smb_ntr_DataCount, data_sent_thistime);
 
                if(data_sent_thistime == 0) {
-                       SIVAL(outbuf,smb_ntr_DataOffset,0);
-                       SIVAL(outbuf,smb_ntr_DataDisplacement, 0);
+                       SIVAL(req->outbuf,smb_ntr_DataOffset,0);
+                       SIVAL(req->outbuf,smb_ntr_DataDisplacement, 0);
                } else {
                        /*
                         * The offset of the data bytes is the offset of the
                         * parameter bytes plus the number of parameters being 
sent this time.
                         */
 
-                       
SIVAL(outbuf,smb_ntr_DataOffset,((smb_buf(outbuf)+alignment_offset) -
-                               smb_base(outbuf)) + params_sent_thistime + 
data_alignment_offset);
-                               SIVAL(outbuf,smb_ntr_DataDisplacement, pd - 
pdata);
+                       SIVAL(req->outbuf, smb_ntr_DataOffset,
+                             ((smb_buf(req->outbuf)+alignment_offset) -
+                              smb_base(req->outbuf))
+                             + params_sent_thistime + data_alignment_offset);
+                       SIVAL(req->outbuf,smb_ntr_DataDisplacement, pd - pdata);
                }
 
                /* 
@@ -223,7 +207,12 @@
                 */
 
                if(params_sent_thistime) {
-                       
memcpy((smb_buf(outbuf)+alignment_offset),pp,params_sent_thistime);
+                       if (alignment_offset != 0) {
+                               memset(smb_buf(req->outbuf), 0,
+                                      alignment_offset);
+                       }
+                       memcpy((smb_buf(req->outbuf)+alignment_offset), pp,
+                              params_sent_thistime);
                }
 
                /*
@@ -231,20 +220,34 @@
                 */
 
                if(data_sent_thistime) {
-                       
memcpy(smb_buf(outbuf)+alignment_offset+params_sent_thistime+
-                               data_alignment_offset,pd,data_sent_thistime);
+                       if (data_alignment_offset != 0) {
+                               memset((smb_buf(req->outbuf)+alignment_offset+
+                                       params_sent_thistime), 0,
+                                      data_alignment_offset);
+                       }
+                       memcpy(smb_buf(req->outbuf)+alignment_offset
+                              +params_sent_thistime+data_alignment_offset,
+                              pd,data_sent_thistime);
                }
     
                DEBUG(9,("nt_rep: params_sent_thistime = %d, data_sent_thistime 
= %d, useable_space = %d\n",
                        params_sent_thistime, data_sent_thistime, 
useable_space));
                DEBUG(9,("nt_rep: params_to_send = %d, data_to_send = %d, 
paramsize = %d, datasize = %d\n",
                        params_to_send, data_to_send, paramsize, datasize));
+
+               if (NT_STATUS_V(nt_error)) {
+                       error_packet_set((char *)req->outbuf,
+                                        0, 0, nt_error,
+                                        __LINE__,__FILE__);
+               }
     
                /* Send the packet */
-               show_msg(outbuf);
-               if (!send_smb(smbd_server_fd(),outbuf)) {
+               show_msg((char *)req->outbuf);
+               if (!send_smb(smbd_server_fd(),(char *)req->outbuf)) {
                        exit_server_cleanly("send_nt_replies: send_smb 
failed.");
                }
+
+               TALLOC_FREE(req->outbuf);
     
                pp += params_sent_thistime;
                pd += data_sent_thistime;
@@ -259,7 +262,6 @@
                if(params_to_send < 0 || data_to_send < 0) {
                        DEBUG(0,("send_nt_replies failed sanity check pts = %d, 
dts = %d\n!!!",
                                params_to_send, data_to_send));
-                       TALLOC_FREE(req->outbuf);
                        return;
                }
        } 

Reply via email to