mirror of
https://github.com/samba-team/samba.git
synced 2025-03-12 20:58:37 +03:00
ndr: shift ndr_pull_security_ace to manual code
This was manual until commit c73034cf7c4392f5d3505319948bc84634c20fa5 (a few months ago). Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz> Reviewed-by: Andrew Bartlett <abartlet@samba.org> BUG: https://bugzilla.samba.org/show_bug.cgi?id=15574 (cherry picked from commit 1e6a876c2cc4b3b54895dde879492e756bb9b963)
This commit is contained in:
parent
f8014cae2e
commit
8787185a6c
@ -715,7 +715,7 @@ interface security
|
||||
[default][flag(NDR_REMAINING)] DATA_BLOB ignored;
|
||||
} security_ace_coda;
|
||||
|
||||
typedef [public,gensize,nosize] struct {
|
||||
typedef [public,gensize,nosize,nopull] struct {
|
||||
security_ace_type type; /* SEC_ACE_TYPE_* */
|
||||
security_ace_flags flags; /* SEC_ACE_FLAG_* */
|
||||
[value(ndr_size_security_ace(r,ndr->flags))] uint16 size;
|
||||
|
@ -75,6 +75,36 @@ size_t ndr_size_security_ace(const struct security_ace *ace, libndr_flags flags)
|
||||
return ret;
|
||||
}
|
||||
|
||||
_PUBLIC_ enum ndr_err_code ndr_pull_security_ace(struct ndr_pull *ndr, ndr_flags_type ndr_flags, struct security_ace *r)
|
||||
{
|
||||
NDR_PULL_CHECK_FLAGS(ndr, ndr_flags);
|
||||
if (ndr_flags & NDR_SCALARS) {
|
||||
NDR_CHECK(ndr_pull_align(ndr, 5));
|
||||
NDR_CHECK(ndr_pull_security_ace_type(ndr, NDR_SCALARS, &r->type));
|
||||
NDR_CHECK(ndr_pull_security_ace_flags(ndr, NDR_SCALARS, &r->flags));
|
||||
NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &r->size));
|
||||
NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->access_mask));
|
||||
NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, sec_ace_object(r->type)));
|
||||
NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_SCALARS, &r->object));
|
||||
NDR_CHECK(ndr_pull_dom_sid(ndr, NDR_SCALARS, &r->trustee));
|
||||
{
|
||||
struct ndr_pull *_ndr_coda;
|
||||
ssize_t sub_size = ndr_subcontext_size_of_ace_coda(r, r->size, ndr->flags);
|
||||
NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_coda, 0, sub_size));
|
||||
NDR_CHECK(ndr_pull_set_switch_value(_ndr_coda, &r->coda, r->type));
|
||||
NDR_CHECK(ndr_pull_security_ace_coda(_ndr_coda, NDR_SCALARS|NDR_BUFFERS, &r->coda));
|
||||
NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_coda, 0, sub_size));
|
||||
}
|
||||
NDR_CHECK(ndr_pull_trailer_align(ndr, 5));
|
||||
}
|
||||
if (ndr_flags & NDR_BUFFERS) {
|
||||
NDR_CHECK(ndr_pull_set_switch_value(ndr, &r->object, sec_ace_object(r->type)));
|
||||
NDR_CHECK(ndr_pull_security_ace_object_ctr(ndr, NDR_BUFFERS, &r->object));
|
||||
}
|
||||
return NDR_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* An ACE coda can't be bigger than the space allowed for by
|
||||
* ace->size, so we need to check this from the context of the ACE.
|
||||
|
Loading…
x
Reference in New Issue
Block a user