s3: smbd: Update smb_set_posix_acl() to have only one exit path.
authorJeremy Allison <jra@samba.org>
Thu, 13 Jun 2019 22:45:51 +0000 (15:45 -0700)
committerJeremy Allison <jra@samba.org>
Mon, 24 Jun 2019 18:49:08 +0000 (18:49 +0000)
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/smbd/trans2.c

index e6667333866df2f572bfc74536ab69026e42f33f..09709173add74a9541c80ab3cd41928e08423ba7 100644 (file)
@@ -7212,7 +7212,8 @@ static NTSTATUS smb_set_posix_acl(connection_struct *conn,
        NTSTATUS status;
 
        if (total_data < SMB_POSIX_ACL_HEADER_SIZE) {
-               return NT_STATUS_INVALID_PARAMETER;
+               status = NT_STATUS_INVALID_PARAMETER;
+               goto out;
        }
        posix_acl_version = SVAL(pdata,0);
        num_file_acls = SVAL(pdata,2);
@@ -7229,17 +7230,19 @@ static NTSTATUS smb_set_posix_acl(connection_struct *conn,
        }
 
        if (posix_acl_version != SMB_POSIX_ACL_VERSION) {
-               return NT_STATUS_INVALID_PARAMETER;
+               status = NT_STATUS_INVALID_PARAMETER;
+               goto out;
        }
 
        if (total_data < SMB_POSIX_ACL_HEADER_SIZE +
                        (num_file_acls+num_def_acls)*SMB_POSIX_ACL_ENTRY_SIZE) {
-               return NT_STATUS_INVALID_PARAMETER;
+               status = NT_STATUS_INVALID_PARAMETER;
+               goto out;
        }
 
        status = refuse_symlink(conn, fsp, smb_fname);
        if (!NT_STATUS_IS_OK(status)) {
-               return status;
+               goto out;
        }
 
        DBG_DEBUG("file %s num_file_acls = %"PRIu16", "
@@ -7251,16 +7254,23 @@ static NTSTATUS smb_set_posix_acl(connection_struct *conn,
        if (valid_file_acls && !set_unix_posix_acl(conn, fsp,
                smb_fname, num_file_acls,
                pdata + SMB_POSIX_ACL_HEADER_SIZE)) {
-               return map_nt_error_from_unix(errno);
+               status = map_nt_error_from_unix(errno);
+               goto out;
        }
 
        if (valid_def_acls && !set_unix_posix_default_acl(conn,
                smb_fname, num_def_acls,
                pdata + SMB_POSIX_ACL_HEADER_SIZE +
                (num_file_acls*SMB_POSIX_ACL_ENTRY_SIZE))) {
-               return map_nt_error_from_unix(errno);
+               status = map_nt_error_from_unix(errno);
+               goto out;
        }
-       return NT_STATUS_OK;
+
+       status = NT_STATUS_OK;
+
+  out:
+
+       return status;
 }
 #endif