librpc/security.idl: adjust size calculations for upcoming ace types
commitc73034cf7c4392f5d3505319948bc84634c20fa5
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 13 Jul 2023 09:31:50 +0000 (13 21:31 +1200)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 24 Aug 2023 02:53:31 +0000 (24 02:53 +0000)
tree197db553fd47b3a5eade033d7f31f1a148384726
parent47edd41bc903ccd95eb368e405c5cdda65de4332
librpc/security.idl: adjust size calculations for upcoming ace types

Soon we will get Conditional ACEs and Resource Attribute ACES, each of
which have trailing bytes at the end of the ACE. Here's a diagram:

              ____      The ACE size field may indicate a size bigger
  .type      /    |     than the known parts, even when you take
  .flags    /     |     rounding to a multiple of four into account.
  .size  --'      |     This extra data is meaningful in some ACEs.
  .access_mask    |
  .trustee (sid) _|  <- known data ends here.
                  :
   "coda"      ___:  <- the trailing part, Zero size unless the size
                        field points beyond the end of the known data.
Probably empty for ordinary ACE types.

Until now we have thrown away these extra bytes, because they have no
meaning in the ACE types we recognise. But with conditional and
resource attribute ACEs we need to catch and process these bytes, so
we add an extra field for that.

Thus we can drop the manually written ndr_pull_security_ace() that
discarded the trailing bytes, because we just allow it to be pulled
into an unused blob. In the very common case, the blob will be empty.

Microsoft does not use a common name across different ACE types to
describe this end-data -- "coda" is a Samba term.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
libcli/security/secace.c
libcli/security/secace.h
librpc/idl/security.idl
librpc/ndr/ndr_sec_helper.c
selftest/knownfail.d/ndrdump [new file with mode: 0644]