r6342: fixed a bad union assumption that caused ACLs to fail on 64 bit machines
authorAndrew Tridgell <tridge@samba.org>
Thu, 14 Apr 2005 13:19:40 +0000 (13:19 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:11:33 +0000 (13:11 -0500)
Thanks to lars and agruen for finding this

source/client/client.c
source/include/smb_interfaces.h
source/libcli/raw/rawacl.c
source/libcli/raw/rawfileinfo.c
source/ntvfs/posix/pvfs_acl.c
source/smb_server/nttrans.c
source/torture/raw/acls.c

index 9738292f037978e33eaa24a6ec60bbeed3c6f793..248113a564c90956b3e6fd1e0c653ce0c6cf177d 100644 (file)
@@ -1870,7 +1870,7 @@ static int cmd_acl(const char **cmd_ptr)
 
        query.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        query.query_secdesc.in.fnum = fnum;
-       query.query_secdesc.in.secinfo_flags = 0x7;
+       query.query_secdesc.secinfo_flags = 0x7;
 
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &query);
        if (!NT_STATUS_IS_OK(status)) {
index 370afb09ea89e28c9b56366082b3ac1581f002c2..e91d2f7c53a59f3bb38e06972724c27e7a3cbedd 100644 (file)
@@ -677,10 +677,8 @@ union smb_fileinfo {
        /* RAW_FILEINFO_SEC_DESC */
        struct {
                enum smb_fileinfo_level level;
-               struct {
-                       uint16_t fnum;
-                       uint32_t secinfo_flags;
-               } in;
+               union smb_fileinfo_in in;
+               uint32_t secinfo_flags;
                struct {
                        struct security_descriptor *sd;
                } out;
index 82c69ec706ec58dc733fb54c799a67d93e41296b..e168da9d1d51c5cd379d994c13cf09ec98063e63 100644 (file)
@@ -40,7 +40,7 @@ struct smbcli_request *smb_raw_query_secdesc_send(struct smbcli_tree *tree,
 
        SSVAL(params, 0, io->query_secdesc.in.fnum);
        SSVAL(params, 2, 0); /* padding */
-       SIVAL(params, 4, io->query_secdesc.in.secinfo_flags);
+       SIVAL(params, 4, io->query_secdesc.secinfo_flags);
 
        nt.in.params.data = params;
        nt.in.params.length = 8;
index 88c2f0d0fccf0046c3872b91969ec851e129a068..9f7786429c2eea925830b178bd632d0ce7341bb0 100644 (file)
@@ -310,7 +310,7 @@ static struct smbcli_request *smb_raw_fileinfo_blob_send(struct smbcli_tree *tre
                return NULL;
        }
 
-       SIVAL(tp.in.params.data, 0, fnum);
+       SSVAL(tp.in.params.data, 0, fnum);
        SSVAL(tp.in.params.data, 2, info_level);
 
        req = smb_raw_trans2_send(tree, &tp);
index 7e4b07a9410b438da4a9f4cf4d57eaa26227cc31..33756bc8bc0d7283544b9a7439e54011e739cd36 100644 (file)
@@ -309,7 +309,7 @@ NTSTATUS pvfs_acl_query(struct pvfs_state *pvfs,
                return NT_STATUS_INVALID_ACL;
        }
 
-       normalise_sd_flags(sd, info->query_secdesc.in.secinfo_flags);
+       normalise_sd_flags(sd, info->query_secdesc.secinfo_flags);
 
        info->query_secdesc.out.sd = sd;
 
index 9a3b919d8ba953849fde09516f100cdaf2987ced..215b378283c6844887d919bc12375ab73f237a28 100644 (file)
@@ -197,7 +197,7 @@ static NTSTATUS nttrans_query_sec_desc(struct smbsrv_request *req,
 
        io->query_secdesc.level            = RAW_FILEINFO_SEC_DESC;
        io->query_secdesc.in.fnum          = SVAL(trans->in.params.data, 0);
-       io->query_secdesc.in.secinfo_flags = IVAL(trans->in.params.data, 4);
+       io->query_secdesc.secinfo_flags    = IVAL(trans->in.params.data, 4);
 
        /* call the backend - notice that we do it sync for now, until we support
           async nttrans requests */    
index f6a51a8d91e515ee6be5ebbf35c8ffd5c4ccabb5..0302789c8d2dfa1b7bf6c7e1d4302ebb304ad2f0 100644 (file)
@@ -71,7 +71,7 @@ static BOOL test_sd(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = 
+       q.query_secdesc.secinfo_flags = 
                SECINFO_OWNER |
                SECINFO_GROUP |
                SECINFO_DACL;
@@ -93,7 +93,7 @@ static BOOL test_sd(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 
        set.set_secdesc.level = RAW_SFILEINFO_SEC_DESC;
        set.set_secdesc.file.fnum = fnum;
-       set.set_secdesc.in.secinfo_flags = q.query_secdesc.in.secinfo_flags;
+       set.set_secdesc.in.secinfo_flags = q.query_secdesc.secinfo_flags;
        set.set_secdesc.in.sd = sd;
 
        status = smb_raw_setfileinfo(cli->tree, &set);
@@ -181,7 +181,7 @@ static BOOL test_nttrans_create(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = 
+       q.query_secdesc.secinfo_flags = 
                SECINFO_OWNER |
                SECINFO_GROUP |
                SECINFO_DACL;
@@ -282,7 +282,7 @@ static BOOL test_creator_sid(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        printf("get the original sd\n");
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
+       q.query_secdesc.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &q);
        CHECK_STATUS(status, NT_STATUS_OK);
        sd_orig = q.query_secdesc.out.sd;
@@ -520,7 +520,7 @@ static BOOL test_generic_bits(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        printf("get the original sd\n");
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
+       q.query_secdesc.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &q);
        CHECK_STATUS(status, NT_STATUS_OK);
        sd_orig = q.query_secdesc.out.sd;
@@ -682,7 +682,7 @@ static BOOL test_generic_bits(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        printf("get the original sd\n");
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
+       q.query_secdesc.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &q);
        CHECK_STATUS(status, NT_STATUS_OK);
        sd_orig = q.query_secdesc.out.sd;
@@ -800,7 +800,7 @@ static BOOL test_owner_bits(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        printf("get the original sd\n");
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
+       q.query_secdesc.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &q);
        CHECK_STATUS(status, NT_STATUS_OK);
        sd_orig = q.query_secdesc.out.sd;
@@ -1022,7 +1022,7 @@ static BOOL test_inheritance(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        printf("get the original sd\n");
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
+       q.query_secdesc.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &q);
        CHECK_STATUS(status, NT_STATUS_OK);
        sd_orig = q.query_secdesc.out.sd;
@@ -1207,7 +1207,7 @@ static BOOL test_inheritance(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
        CHECK_ACCESS_FLAGS(fnum2, SEC_RIGHTS_FILE_ALL);
 
        q.query_secdesc.in.fnum = fnum2;
-       q.query_secdesc.in.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
+       q.query_secdesc.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &q);
        CHECK_STATUS(status, NT_STATUS_OK);
        smbcli_close(cli->tree, fnum2);
@@ -1321,7 +1321,7 @@ static BOOL test_inheritance_dynamic(struct smbcli_state *cli, TALLOC_CTX *mem_c
        printf("get the original sd\n");
        q.query_secdesc.level = RAW_FILEINFO_SEC_DESC;
        q.query_secdesc.in.fnum = fnum;
-       q.query_secdesc.in.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
+       q.query_secdesc.secinfo_flags = SECINFO_DACL | SECINFO_OWNER;
        status = smb_raw_fileinfo(cli->tree, mem_ctx, &q);
        CHECK_STATUS(status, NT_STATUS_OK);
        sd_orig = q.query_secdesc.out.sd;