diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-04-14 13:19:40 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:11:33 -0500 |
commit | d9c15b0f280621fca844c0e8482b5e95f4ad2d11 (patch) | |
tree | 2b4e506c9012caece3916f1d63fd9daf7a46fd9c | |
parent | fdbc094c3ebdc2464ebcdd220667348b684ce103 (diff) | |
download | samba-d9c15b0f280621fca844c0e8482b5e95f4ad2d11.tar.gz samba-d9c15b0f280621fca844c0e8482b5e95f4ad2d11.tar.bz2 samba-d9c15b0f280621fca844c0e8482b5e95f4ad2d11.zip |
r6342: fixed a bad union assumption that caused ACLs to fail on 64 bit machines
Thanks to lars and agruen for finding this
(This used to be commit 2acc06918574b1178eecf3d61026f84f85bb40e1)
-rw-r--r-- | source4/client/client.c | 2 | ||||
-rw-r--r-- | source4/include/smb_interfaces.h | 6 | ||||
-rw-r--r-- | source4/libcli/raw/rawacl.c | 2 | ||||
-rw-r--r-- | source4/libcli/raw/rawfileinfo.c | 2 | ||||
-rw-r--r-- | source4/ntvfs/posix/pvfs_acl.c | 2 | ||||
-rw-r--r-- | source4/smb_server/nttrans.c | 2 | ||||
-rw-r--r-- | source4/torture/raw/acls.c | 20 |
7 files changed, 17 insertions, 19 deletions
diff --git a/source4/client/client.c b/source4/client/client.c index 9738292f03..248113a564 100644 --- a/source4/client/client.c +++ b/source4/client/client.c @@ -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)) { diff --git a/source4/include/smb_interfaces.h b/source4/include/smb_interfaces.h index 370afb09ea..e91d2f7c53 100644 --- a/source4/include/smb_interfaces.h +++ b/source4/include/smb_interfaces.h @@ -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; diff --git a/source4/libcli/raw/rawacl.c b/source4/libcli/raw/rawacl.c index 82c69ec706..e168da9d1d 100644 --- a/source4/libcli/raw/rawacl.c +++ b/source4/libcli/raw/rawacl.c @@ -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; diff --git a/source4/libcli/raw/rawfileinfo.c b/source4/libcli/raw/rawfileinfo.c index 88c2f0d0fc..9f7786429c 100644 --- a/source4/libcli/raw/rawfileinfo.c +++ b/source4/libcli/raw/rawfileinfo.c @@ -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); diff --git a/source4/ntvfs/posix/pvfs_acl.c b/source4/ntvfs/posix/pvfs_acl.c index 7e4b07a941..33756bc8bc 100644 --- a/source4/ntvfs/posix/pvfs_acl.c +++ b/source4/ntvfs/posix/pvfs_acl.c @@ -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; diff --git a/source4/smb_server/nttrans.c b/source4/smb_server/nttrans.c index 9a3b919d8b..215b378283 100644 --- a/source4/smb_server/nttrans.c +++ b/source4/smb_server/nttrans.c @@ -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 */ diff --git a/source4/torture/raw/acls.c b/source4/torture/raw/acls.c index f6a51a8d91..0302789c8d 100644 --- a/source4/torture/raw/acls.c +++ b/source4/torture/raw/acls.c @@ -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; |