mirror of
https://github.com/samba-team/samba.git
synced 2025-09-18 09:44:19 +03:00
r4463: added testing of the special SID_CREATOR_OWNER inheritance rules
(This used to be commit 5448c72ebe
)
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
c8541d041f
commit
3b21422ae8
@@ -764,6 +764,7 @@ static BOOL test_inheritance(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
|||||||
union smb_setfileinfo set;
|
union smb_setfileinfo set;
|
||||||
struct security_descriptor *sd, *sd_orig, *sd_def;
|
struct security_descriptor *sd, *sd_orig, *sd_def;
|
||||||
const char *owner_sid;
|
const char *owner_sid;
|
||||||
|
const struct dom_sid *creator_owner;
|
||||||
const struct {
|
const struct {
|
||||||
uint32_t parent_flags;
|
uint32_t parent_flags;
|
||||||
uint32_t file_flags;
|
uint32_t file_flags;
|
||||||
@@ -901,6 +902,8 @@ static BOOL test_inheritance(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
|||||||
|
|
||||||
owner_sid = dom_sid_string(mem_ctx, sd_orig->owner_sid);
|
owner_sid = dom_sid_string(mem_ctx, sd_orig->owner_sid);
|
||||||
|
|
||||||
|
printf("owner_sid is %s\n", owner_sid);
|
||||||
|
|
||||||
sd_def = security_descriptor_create(mem_ctx,
|
sd_def = security_descriptor_create(mem_ctx,
|
||||||
owner_sid, NULL,
|
owner_sid, NULL,
|
||||||
owner_sid,
|
owner_sid,
|
||||||
@@ -913,10 +916,12 @@ static BOOL test_inheritance(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
|||||||
0,
|
0,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
creator_owner = dom_sid_parse_talloc(mem_ctx, SID_CREATOR_OWNER);
|
||||||
|
|
||||||
for (i=0;i<ARRAY_SIZE(test_flags);i++) {
|
for (i=0;i<ARRAY_SIZE(test_flags);i++) {
|
||||||
sd = security_descriptor_create(mem_ctx,
|
sd = security_descriptor_create(mem_ctx,
|
||||||
NULL, NULL,
|
NULL, NULL,
|
||||||
owner_sid,
|
SID_CREATOR_OWNER,
|
||||||
SEC_ACE_TYPE_ACCESS_ALLOWED,
|
SEC_ACE_TYPE_ACCESS_ALLOWED,
|
||||||
SEC_FILE_WRITE_DATA,
|
SEC_FILE_WRITE_DATA,
|
||||||
test_flags[i].parent_flags,
|
test_flags[i].parent_flags,
|
||||||
@@ -998,26 +1003,51 @@ static BOOL test_inheritance(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (q.query_secdesc.out.sd->dacl == NULL ||
|
if ((test_flags[i].parent_flags & SEC_ACE_FLAG_CONTAINER_INHERIT) &&
|
||||||
q.query_secdesc.out.sd->dacl->num_aces != 1 ||
|
(test_flags[i].parent_flags & SEC_ACE_FLAG_NO_PROPAGATE_INHERIT)) {
|
||||||
q.query_secdesc.out.sd->dacl->aces[0].access_mask != SEC_FILE_WRITE_DATA ||
|
if (q.query_secdesc.out.sd->dacl == NULL ||
|
||||||
!dom_sid_equal(&q.query_secdesc.out.sd->dacl->aces[0].trustee,
|
q.query_secdesc.out.sd->dacl->num_aces != 1 ||
|
||||||
sd_orig->owner_sid)) {
|
q.query_secdesc.out.sd->dacl->aces[0].access_mask != SEC_FILE_WRITE_DATA ||
|
||||||
printf("Bad sd in child dir at %d (parent 0x%x)\n",
|
!dom_sid_equal(&q.query_secdesc.out.sd->dacl->aces[0].trustee,
|
||||||
i, test_flags[i].parent_flags);
|
sd_orig->owner_sid) ||
|
||||||
NDR_PRINT_DEBUG(security_descriptor, q.query_secdesc.out.sd);
|
q.query_secdesc.out.sd->dacl->aces[0].flags != test_flags[i].dir_flags) {
|
||||||
ret = False;
|
printf("Bad sd in child dir at %d (parent 0x%x)\n",
|
||||||
continue;
|
i, test_flags[i].parent_flags);
|
||||||
}
|
NDR_PRINT_DEBUG(security_descriptor, q.query_secdesc.out.sd);
|
||||||
|
ret = False;
|
||||||
if (q.query_secdesc.out.sd->dacl->aces[0].flags !=
|
continue;
|
||||||
test_flags[i].dir_flags) {
|
}
|
||||||
printf("incorrect dir_flags 0x%x - expected 0x%x for parent 0x%x with (i=%d)\n",
|
} else if (test_flags[i].parent_flags & SEC_ACE_FLAG_CONTAINER_INHERIT) {
|
||||||
q.query_secdesc.out.sd->dacl->aces[0].flags,
|
if (q.query_secdesc.out.sd->dacl == NULL ||
|
||||||
test_flags[i].dir_flags,
|
q.query_secdesc.out.sd->dacl->num_aces != 2 ||
|
||||||
test_flags[i].parent_flags,
|
q.query_secdesc.out.sd->dacl->aces[0].access_mask != SEC_FILE_WRITE_DATA ||
|
||||||
i);
|
!dom_sid_equal(&q.query_secdesc.out.sd->dacl->aces[0].trustee,
|
||||||
ret = False;
|
sd_orig->owner_sid) ||
|
||||||
|
q.query_secdesc.out.sd->dacl->aces[1].access_mask != SEC_FILE_WRITE_DATA ||
|
||||||
|
!dom_sid_equal(&q.query_secdesc.out.sd->dacl->aces[1].trustee,
|
||||||
|
creator_owner) ||
|
||||||
|
q.query_secdesc.out.sd->dacl->aces[0].flags != 0 ||
|
||||||
|
q.query_secdesc.out.sd->dacl->aces[1].flags !=
|
||||||
|
(test_flags[i].dir_flags | SEC_ACE_FLAG_INHERIT_ONLY)) {
|
||||||
|
printf("Bad sd in child dir at %d (parent 0x%x)\n",
|
||||||
|
i, test_flags[i].parent_flags);
|
||||||
|
NDR_PRINT_DEBUG(security_descriptor, q.query_secdesc.out.sd);
|
||||||
|
ret = False;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (q.query_secdesc.out.sd->dacl == NULL ||
|
||||||
|
q.query_secdesc.out.sd->dacl->num_aces != 1 ||
|
||||||
|
q.query_secdesc.out.sd->dacl->aces[0].access_mask != SEC_FILE_WRITE_DATA ||
|
||||||
|
!dom_sid_equal(&q.query_secdesc.out.sd->dacl->aces[0].trustee,
|
||||||
|
creator_owner) ||
|
||||||
|
q.query_secdesc.out.sd->dacl->aces[0].flags != test_flags[i].dir_flags) {
|
||||||
|
printf("Bad sd in child dir at %d (parent 0x%x)\n",
|
||||||
|
i, test_flags[i].parent_flags);
|
||||||
|
NDR_PRINT_DEBUG(security_descriptor, q.query_secdesc.out.sd);
|
||||||
|
ret = False;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1064,6 +1094,11 @@ BOOL torture_raw_acls(void)
|
|||||||
ret &= test_generic_bits(cli, mem_ctx);
|
ret &= test_generic_bits(cli, mem_ctx);
|
||||||
ret &= test_inheritance(cli, mem_ctx);
|
ret &= test_inheritance(cli, mem_ctx);
|
||||||
|
|
||||||
|
printf("\n *** NOTE! need to add dynamic inheritance test **\n");
|
||||||
|
#if 0
|
||||||
|
ret &= test_inheritance_dynamic(cli, mem_ctx);
|
||||||
|
#endif
|
||||||
|
|
||||||
smb_raw_exit(cli->session);
|
smb_raw_exit(cli->session);
|
||||||
smbcli_deltree(cli->tree, BASEDIR);
|
smbcli_deltree(cli->tree, BASEDIR);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user