r24325: Push down reply_prep_legacy in reply_read_and_X
authorVolker Lendecke <vlendec@samba.org>
Sat, 11 Aug 2007 11:20:21 +0000 (11:20 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:29:29 +0000 (12:29 -0500)
(This used to be commit 9d2354129dad1d4d015d463f138a196f9f72af2f)

source3/smbd/reply.c

index cf30c183fa2c92d6bd96b860edcbfea582bd5316..7b981e1c8ad90f74dc8600f062b8545207f1d84b 100644 (file)
@@ -2900,20 +2900,12 @@ void reply_read_and_X(connection_struct *conn, struct smb_request *req)
                return;
        }
 
-       if (!reply_prep_legacy(req, &inbuf, &outbuf, &length, &bufsize)) {
-               reply_nterror(req, NT_STATUS_NO_MEMORY);
-               END_PROFILE(SMBreadX);
-               return;
-       }
-
-       set_message(inbuf,outbuf,12,0,True);
-
        if (global_client_caps & CAP_LARGE_READX) {
-               size_t upper_size = SVAL(inbuf,smb_vwv7);
+               size_t upper_size = SVAL(req->inbuf,smb_vwv7);
                smb_maxcnt |= (upper_size<<16);
                if (upper_size > 1) {
                        /* Can't do this on a chained packet. */
-                       if ((CVAL(inbuf,smb_vwv0) != 0xFF)) {
+                       if ((CVAL(req->inbuf,smb_vwv0) != 0xFF)) {
                                reply_nterror(req, NT_STATUS_NOT_SUPPORTED);
                                END_PROFILE(SMBreadX);
                                return;
@@ -2935,12 +2927,12 @@ void reply_read_and_X(connection_struct *conn, struct smb_request *req)
                }
        }
 
-       if(CVAL(inbuf,smb_wct) == 12) {
+       if (req->wct == 12) {
 #ifdef LARGE_SMB_OFF_T
                /*
                 * This is a large offset (64 bit) read.
                 */
-               startpos |= (((SMB_OFF_T)IVAL(inbuf,smb_vwv10)) << 32);
+               startpos |= (((SMB_OFF_T)IVAL(req->inbuf,smb_vwv10)) << 32);
 
 #else /* !LARGE_SMB_OFF_T */
 
@@ -2948,10 +2940,10 @@ void reply_read_and_X(connection_struct *conn, struct smb_request *req)
                 * Ensure we haven't been sent a >32 bit offset.
                 */
 
-               if(IVAL(inbuf,smb_vwv10) != 0) {
+               if(IVAL(req->inbuf,smb_vwv10) != 0) {
                        DEBUG(0,("reply_read_and_X - large offset (%x << 32) "
                                 "used and we don't support 64 bit offsets.\n",
-                                (unsigned int)IVAL(inbuf,smb_vwv10) ));
+                                (unsigned int)IVAL(req->inbuf,smb_vwv10) ));
                        END_PROFILE(SMBreadX);
                        reply_doserror(req, ERRDOS, ERRbadaccess);
                        return;
@@ -2968,6 +2960,14 @@ void reply_read_and_X(connection_struct *conn, struct smb_request *req)
                return;
        }
 
+       if (!reply_prep_legacy(req, &inbuf, &outbuf, &length, &bufsize)) {
+               reply_nterror(req, NT_STATUS_NO_MEMORY);
+               END_PROFILE(SMBreadX);
+               return;
+       }
+
+       set_message(inbuf,outbuf,12,0,True);
+
        if (!big_readX
            && schedule_aio_read_and_X(conn, inbuf, outbuf, length, bufsize,
                                       fsp, startpos, smb_maxcnt)) {