Fix bug #7188 - Logic error in check of total_data for call_trans2mkdir()
authorJeremy Allison <jra@samba.org>
Mon, 15 Mar 2010 22:04:18 +0000 (15:04 -0700)
committerKarolin Seeger <kseeger@samba.org>
Thu, 20 May 2010 10:32:00 +0000 (12:32 +0200)
Make ea data checks identical for trans2open and trans2mkdir.

Jeremy.
(cherry picked from commit 704a607e3c3a5c3e727b386fab9dbcdff56b5ac4)

source3/smbd/trans2.c

index 36b2749700dcbfcc4f64870f8e2a65652afe6f17..963103c85b8f2b897fbbf79bee63dee9f2460e6f 100644 (file)
@@ -1060,12 +1060,7 @@ static void call_trans2open(connection_struct *conn,
        }
 
        /* Any data in this call is an EA list. */
-       if (total_data && (total_data != 4) && !lp_ea_support(SNUM(conn))) {
-               reply_nterror(req, NT_STATUS_EAS_NOT_SUPPORTED);
-               goto out;
-       }
-
-       if (total_data != 4) {
+       if (total_data && (total_data != 4)) {
                if (total_data < 10) {
                        reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
                        goto out;
@@ -1084,9 +1079,11 @@ static void call_trans2open(connection_struct *conn,
                        reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
                        goto out;
                }
-       } else if (IVAL(pdata,0) != 4) {
-               reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
-               goto out;
+
+               if (!lp_ea_support(SNUM(conn))) {
+                       reply_nterror(req, NT_STATUS_EAS_NOT_SUPPORTED);
+                       goto out;
+               }
        }
 
        status = SMB_VFS_CREATE_FILE(
@@ -7806,19 +7803,14 @@ static void call_trans2mkdir(connection_struct *conn, struct smb_request *req,
                return;
         }
 
-       /* Any data in this call is an EA list. */
-       if (total_data && (total_data != 4) && !lp_ea_support(SNUM(conn))) {
-               reply_nterror(req, NT_STATUS_EAS_NOT_SUPPORTED);
-               goto out;
-       }
-
        /*
         * OS/2 workplace shell seems to send SET_EA requests of "null"
         * length (4 bytes containing IVAL 4).
         * They seem to have no effect. Bug #3212. JRA.
         */
 
-       if (total_data != 4) {
+       if (total_data && (total_data != 4)) {
+               /* Any data in this call is an EA list. */
                if (total_data < 10) {
                        reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
                        goto out;
@@ -7837,6 +7829,11 @@ static void call_trans2mkdir(connection_struct *conn, struct smb_request *req,
                        reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
                        goto out;
                }
+
+               if (!lp_ea_support(SNUM(conn))) {
+                       reply_nterror(req, NT_STATUS_EAS_NOT_SUPPORTED);
+                       goto out;
+               }
        }
        /* If total_data == 4 Windows doesn't care what values
         * are placed in that field, it just ignores them.