From d5bf9994ede3c3b2025d918b2231e48a37a3503b Mon Sep 17 00:00:00 2001 From: Joseph Sutton Date: Tue, 15 Aug 2023 12:20:17 +1200 Subject: [PATCH 1/6] tests/krb5: Remove unused import BUG: https://bugzilla.samba.org/show_bug.cgi?id=15452 Signed-off-by: Joseph Sutton Reviewed-by: Andrew Bartlett (cherry picked from commit 2c915e743d53d5e35fa31fa3965d9c9b086351ec) --- python/samba/tests/krb5/claims_in_pac.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/samba/tests/krb5/claims_in_pac.py b/python/samba/tests/krb5/claims_in_pac.py index 82cd7b7e694..2cbb38adb90 100755 --- a/python/samba/tests/krb5/claims_in_pac.py +++ b/python/samba/tests/krb5/claims_in_pac.py @@ -24,7 +24,7 @@ sys.path.insert(0, 'bin/python') os.environ['PYTHONUNBUFFERED'] = '1' from samba.dcerpc import krb5pac, claims -from samba.ndr import ndr_pack, ndr_unpack, ndr_print +from samba.ndr import ndr_pack, ndr_unpack from samba.tests import TestCase class PacClaimsTests(TestCase): -- 2.39.1 From de37bf7d01550e1de54fa266e726708fe8747819 Mon Sep 17 00:00:00 2001 From: Joseph Sutton Date: Tue, 15 Aug 2023 12:20:50 +1200 Subject: [PATCH 2/6] tests/krb5: Shorten long lines BUG: https://bugzilla.samba.org/show_bug.cgi?id=15452 Signed-off-by: Joseph Sutton Reviewed-by: Andrew Bartlett (cherry picked from commit 0cce616843395215305428b8672ffa315dbdd858) --- python/samba/tests/krb5/claims_in_pac.py | 93 +++++++++++++++++++++++- 1 file changed, 91 insertions(+), 2 deletions(-) diff --git a/python/samba/tests/krb5/claims_in_pac.py b/python/samba/tests/krb5/claims_in_pac.py index 2cbb38adb90..76e3943e924 100755 --- a/python/samba/tests/krb5/claims_in_pac.py +++ b/python/samba/tests/krb5/claims_in_pac.py @@ -29,8 +29,97 @@ from samba.tests import TestCase class PacClaimsTests(TestCase): - pac_data_uncompressed = bytes.fromhex("08000000000000000100000000020000880000000000000006000000100000008802000000000000070000001000000098020000000000000a00000020000000a8020000000000000c000000b8000000c8020000000000000d00000090010000800300000000000011000000080000001005000000000000120000001c000000180500000000000001100800ccccccccf001000000000000000002000000000000000000ffffffffffffff7fffffffffffffff7f6ebd4f913c60d9016e7db9bb0561d9016e3da9863d81d90116001600040002000000000008000200000000000c00020000000000100002000000000014000200000000001800020000000000ae04000001020000010000001c00020020000000000000000000000000000000000000001e002000200002000a000c00240002002800020000000000000000001000000000000000000000000000000000000000000000000000000000000000020000002c0002000000000000000000000000000b000000000000000b000000370032003000660064003300630033005f0031003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010200000700000010000000000000000f000000410042004100520054004c00450054002d00440043002d00570049004e000000060000000000000005000000570049004e00320032000000040000000104000000000005150000003f1ba8749a54499be10ea459020000003000020007000000340002000700000005000000010500000000000515000000000000000000000000000000f1010000010000000101000000000012010000000000000010000000d89573aeb6f036c4ca5f5412100000008ada43082e7dfccb7587a4788097ee903c60d9011600370032003000660064003300630033005f00310030003a0018002200580003000000160080001c00980000000000370032003000660064003300630033005f00310030004000770069006e00320032002e006500780061006d0070006c0065002e0063006f006d00000000000000570049004e00320032002e004500580041004d0050004c0045002e0043004f004d00000000000000370032003000660064003300630033005f003100300000000105000000000005150000003f1ba8749a54499be10ea459ae0400000000000001100800cccccccc800100000000000000000200580100000400020000000000580100000000000000000000000000005801000001100800cccccccc480100000000000000000200010000000400020000000000000000000000000001000000010000000300000008000200030000000c000200060006000100000010000200140002000300030003000000180002002800020002000200040000002c0002000b000000000000000b000000370032003000660064003300630033005f00390000000000010000000000000001000000000000000b000000000000000b000000370032003000660064003300630033005f00370000000000030000001c000200200002002400020004000000000000000400000066006f006f0000000400000000000000040000006200610072000000040000000000000004000000620061007a0000000b000000000000000b000000370032003000660064003300630033005f003800000000000400000009000a00000000000700010000000000060001000000000000000100000000000000000002000000010000000105000000000005150000003f1ba8749a54499be10ea459ae04000000000000") - pac_data_compressed = bytes.fromhex("080000000000000001000000f8010000880000000000000006000000100000008002000000000000070000001000000090020000000000000a0000001e000000a0020000000000000c000000b0000000c0020000000000000d0000006002000070030000000000001100000008000000d005000000000000120000001c000000d80500000000000001100800cccccccce801000000000000000002000000000000000000ffffffffffffff7fffffffffffffff7f50b330913c60d90150739abb0561d90150338a863d81d90114001400040002000000000008000200000000000c00020000000000100002000000000014000200000000001800020000000000ad04000001020000010000001c00020020000000000000000000000000000000000000001e002000200002000a000c00240002002800020000000000000000001000000000000000000000000000000000000000000000000000000000000000020000002c0002000000000000000000000000000a000000000000000a000000370032003000660064003300630033005f00360000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010200000700000010000000000000000f000000410042004100520054004c00450054002d00440043002d00570049004e000000060000000000000005000000570049004e00320032000000040000000104000000000005150000003f1ba8749a54499be10ea459020000003000020007000000340002000700000005000000010500000000000515000000000000000000000000000000f10100000100000001010000000000120100000010000000ace7b599ff30aa486b52983210000000b50e9bea014545c97eca0b978097ee903c60d9011400370032003000660064003300630033005f0036000000380018002200500003000000140078001c00900000000000370032003000660064003300630033005f0036004000770069006e00320032002e006500780061006d0070006c0065002e0063006f006d00570049004e00320032002e004500580041004d0050004c0045002e0043004f004d00000000000000370032003000660064003300630033005f003600000000000105000000000005150000003f1ba8749a54499be10ea459ad0400000000000001100800cccccccc500200000000000000000200290200000400020004000000282000000000000000000000000000002902000073778788878808880700080007800800060007000700070887770780080088008870070008000808000080000000008070787787770076770867868788000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000007700080080000000870000000000000085070000000000007476800000000000750587000800000066078000000080706677880080008060878708000000008000800000000000800000000000000000000000000000000000000000000000006080080000000070000000000000000000000000000000000000000000000000fd74eaf001add6213aecf4346587eec48c323e3e1a5a32042eecf243669a581e383d2940e80e383c294463b8c0b49024f1def20df819586b086cd2ab98700923386674845663ef57e91718110c1ad4c0ac88912126d2180545e98670ea2aa002052aa54189cc318d26c46b667f18b6876262a9a4985ecdf76e5161033fd457ba020075360c837aaa3aa82749ee8152420999b553c60195be5e5c35c4330557538772972a7d527aeca1fc6b2951ca254ac83960272a930f3194892d4729eff48e48ccfb929329ff501c356c0e8ed18471ec70986c31da86a8090b4022c1db257514fdba4347532146648d4f99f9065e0d9a0d90d80f38389c39cb9ebe6d4e5e681e5a8a5418f591f1dbb7594a3f2aa3220ced1cd18cb49cffcc2ff18eef6caf443663640c566400001200000002000000010000000105000000000005150000003f1ba8749a54499be10ea459ad04000000000000") + pac_data_uncompressed = bytes.fromhex( + '08000000000000000100000000020000880000000000000006000000100000008802' + '000000000000070000001000000098020000000000000a00000020000000a8020000' + '000000000c000000b8000000c8020000000000000d00000090010000800300000000' + '000011000000080000001005000000000000120000001c0000001805000000000000' + '01100800ccccccccf001000000000000000002000000000000000000ffffffffffff' + 'ff7fffffffffffffff7f6ebd4f913c60d9016e7db9bb0561d9016e3da9863d81d901' + '16001600040002000000000008000200000000000c00020000000000100002000000' + '000014000200000000001800020000000000ae04000001020000010000001c000200' + '20000000000000000000000000000000000000001e002000200002000a000c002400' + '02002800020000000000000000001000000000000000000000000000000000000000' + '000000000000000000000000020000002c0002000000000000000000000000000b00' + '0000000000000b000000370032003000660064003300630033005f00310030000000' + '00000000000000000000000000000000000000000000000000000000000000000000' + '00000000000000000000000000000000000000000000000000000100000001020000' + '0700000010000000000000000f000000410042004100520054004c00450054002d00' + '440043002d00570049004e000000060000000000000005000000570049004e003200' + '32000000040000000104000000000005150000003f1ba8749a54499be10ea4590200' + '00003000020007000000340002000700000005000000010500000000000515000000' + '000000000000000000000000f1010000010000000101000000000012010000000000' + '000010000000d89573aeb6f036c4ca5f5412100000008ada43082e7dfccb7587a478' + '8097ee903c60d9011600370032003000660064003300630033005f00310030003a00' + '18002200580003000000160080001c00980000000000370032003000660064003300' + '630033005f00310030004000770069006e00320032002e006500780061006d007000' + '6c0065002e0063006f006d00000000000000570049004e00320032002e0045005800' + '41004d0050004c0045002e0043004f004d0000000000000037003200300066006400' + '3300630033005f003100300000000105000000000005150000003f1ba8749a54499b' + 'e10ea459ae0400000000000001100800cccccccc8001000000000000000002005801' + '00000400020000000000580100000000000000000000000000005801000001100800' + 'cccccccc480100000000000000000200010000000400020000000000000000000000' + '000001000000010000000300000008000200030000000c0002000600060001000000' + '10000200140002000300030003000000180002002800020002000200040000002c00' + '02000b000000000000000b000000370032003000660064003300630033005f003900' + '00000000010000000000000001000000000000000b000000000000000b0000003700' + '32003000660064003300630033005f00370000000000030000001c00020020000200' + '2400020004000000000000000400000066006f006f00000004000000000000000400' + '00006200610072000000040000000000000004000000620061007a0000000b000000' + '000000000b000000370032003000660064003300630033005f003800000000000400' + '000009000a0000000000070001000000000006000100000000000000010000000000' + '0000000002000000010000000105000000000005150000003f1ba8749a54499be10e' + 'a459ae04000000000000' + ) + + pac_data_compressed = bytes.fromhex( + '080000000000000001000000f8010000880000000000000006000000100000008002' + '000000000000070000001000000090020000000000000a0000001e000000a0020000' + '000000000c000000b0000000c0020000000000000d00000060020000700300000000' + '00001100000008000000d005000000000000120000001c000000d805000000000000' + '01100800cccccccce801000000000000000002000000000000000000ffffffffffff' + 'ff7fffffffffffffff7f50b330913c60d90150739abb0561d90150338a863d81d901' + '14001400040002000000000008000200000000000c00020000000000100002000000' + '000014000200000000001800020000000000ad04000001020000010000001c000200' + '20000000000000000000000000000000000000001e002000200002000a000c002400' + '02002800020000000000000000001000000000000000000000000000000000000000' + '000000000000000000000000020000002c0002000000000000000000000000000a00' + '0000000000000a000000370032003000660064003300630033005f00360000000000' + '00000000000000000000000000000000000000000000000000000000000000000000' + '00000000000000000000000000000000000000000000010000000102000007000000' + '10000000000000000f000000410042004100520054004c00450054002d0044004300' + '2d00570049004e000000060000000000000005000000570049004e00320032000000' + '040000000104000000000005150000003f1ba8749a54499be10ea459020000003000' + '02000700000034000200070000000500000001050000000000051500000000000000' + '0000000000000000f10100000100000001010000000000120100000010000000ace7' + 'b599ff30aa486b52983210000000b50e9bea014545c97eca0b978097ee903c60d901' + '1400370032003000660064003300630033005f003600000038001800220050000300' + '0000140078001c00900000000000370032003000660064003300630033005f003600' + '4000770069006e00320032002e006500780061006d0070006c0065002e0063006f00' + '6d00570049004e00320032002e004500580041004d0050004c0045002e0043004f00' + '4d00000000000000370032003000660064003300630033005f003600000000000105' + '000000000005150000003f1ba8749a54499be10ea459ad0400000000000001100800' + 'cccccccc500200000000000000000200290200000400020004000000282000000000' + '00000000000000000000290200007377878887880888070008000780080006000700' + '07000708877707800800880088700700080008080000800000000080707877877700' + '76770867868788000000000000000000000000000000000000000000000000000000' + '00000000000000000000000000000800000000000000000000000000000000000000' + '00000000000077000800800000008700000000000000850700000000000074768000' + '00000000750587000800000066078000000080706677880080008060878708000000' + '00800080000000000080000000000000000000000000000000000000000000000000' + '6080080000000070000000000000000000000000000000000000000000000000fd74' + 'eaf001add6213aecf4346587eec48c323e3e1a5a32042eecf243669a581e383d2940' + 'e80e383c294463b8c0b49024f1def20df819586b086cd2ab98700923386674845663' + 'ef57e91718110c1ad4c0ac88912126d2180545e98670ea2aa002052aa54189cc318d' + '26c46b667f18b6876262a9a4985ecdf76e5161033fd457ba020075360c837aaa3aa8' + '2749ee8152420999b553c60195be5e5c35c4330557538772972a7d527aeca1fc6b29' + '51ca254ac83960272a930f3194892d4729eff48e48ccfb929329ff501c356c0e8ed1' + '8471ec70986c31da86a8090b4022c1db257514fdba4347532146648d4f99f9065e0d' + '9a0d90d80f38389c39cb9ebe6d4e5e681e5a8a5418f591f1dbb7594a3f2aa3220ced' + '1cd18cb49cffcc2ff18eef6caf443663640c56640000120000000200000001000000' + '0105000000000005150000003f1ba8749a54499be10ea459ad04000000000000' + ) + def test_unpack_raw(self): pac_unpacked_raw = ndr_unpack(krb5pac.PAC_DATA_RAW, self.pac_data_uncompressed) -- 2.39.1 From a0047c47c3227757164bbd5f73cd64373235e138 Mon Sep 17 00:00:00 2001 From: Joseph Sutton Date: Tue, 15 Aug 2023 12:21:30 +1200 Subject: [PATCH 3/6] tests/krb5: Add a test decoding INT64 PAC claims issued by Windows Our NDR code currently handles INT64 claims incorrectly. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15452 Signed-off-by: Joseph Sutton Reviewed-by: Andrew Bartlett (cherry picked from commit 631e26e1d63040b37f48fd890ab03f7adfc6d882) --- python/samba/tests/krb5/claims_in_pac.py | 74 ++++++++++++++++++++++++ selftest/knownfail.d/claims-in-pac | 1 + 2 files changed, 75 insertions(+) create mode 100644 selftest/knownfail.d/claims-in-pac diff --git a/python/samba/tests/krb5/claims_in_pac.py b/python/samba/tests/krb5/claims_in_pac.py index 76e3943e924..a5db7bac84e 100755 --- a/python/samba/tests/krb5/claims_in_pac.py +++ b/python/samba/tests/krb5/claims_in_pac.py @@ -120,6 +120,40 @@ class PacClaimsTests(TestCase): '0105000000000005150000003f1ba8749a54499be10ea459ad04000000000000' ) + pac_data_int64_claim = bytes.fromhex( + '080000000000000001000000f0010000880000000000000006000000100000007802' + '000000000000070000001000000088020000000000000a0000001a00000098020000' + '000000000c00000088000000b8020000000000000d000000d0000000400300000000' + '000011000000080000001004000000000000120000001c0000001804000000000000' + '01100800cccccccce001000000000000000002000000000000000000ffffffffffff' + 'ff7fffffffffffffff7f52a2a6d607cfd90152621001d1cfd901522200cc08f0d901' + '10001000040002000000000008000200000000000c00020000000000100002000000' + '0000140002000000000018000200000000004362000001020000010000001c000200' + '200000000000000000000000000000000000000014001600200002000e0010002400' + '02002800020000000000000000001000000000000000000000000000000000000000' + '000000000000000000000000020000002c0002000000000000000000000000000800' + '0000000000000800000075007300650072006e0061006d0065000000000000000000' + '00000000000000000000000000000000000000000000000000000000000000000000' + '0000000000000000000000000000000000000100000001020000070000000b000000' + '000000000a000000570049004e0032004b00310039002d0044004300080000000000' + '0000070000006500780061006d0070006c0065000000040000000104000000000005' + '15000000bcfb8bf5af39e9b21f9b5fcd020000003000020007000000340002000700' + '000005000000010500000000000515000000000000000000000000000000f1010000' + '010000000101000000000012010000000000000010000000147a8762afe3366b316c' + '936410000000e05a433ae9271bcc603d933480353ad607cfd9011000750073006500' + '72006e0061006d006500000000000000280018001600400003000000100058001c00' + '68000000000075007300650072006e0061006d00650040006500780061006d007000' + '6c0065002e0063006f006d004500580041004d0050004c0045002e0043004f004d00' + '000075007300650072006e0061006d006500010500000000000515000000bcfb8bf5' + 'af39e9b21f9b5fcd436200000000000001100800ccccccccc0000000000000000000' + '02009800000004000200000000009800000000000000000000000000000098000000' + '01100800cccccccc8800000000000000000002000100000004000200000000000000' + '00000000000001000000010000000100000008000200010000000c00020001000100' + '05000000100002000800000000000000080000006100200063006c00610069006d00' + '0000050000000000000003000000000000002a0000000000000019fcffffffffffff' + 'e803000000000000204e000000000000000000000200000001000000010500000000' + '000515000000bcfb8bf5af39e9b21f9b5fcd4362000000000000' + ) def test_unpack_raw(self): pac_unpacked_raw = ndr_unpack(krb5pac.PAC_DATA_RAW, self.pac_data_uncompressed) @@ -411,6 +445,46 @@ class PacClaimsTests(TestCase): client_claims_bytes2 = ndr_pack(client_claims2) self.assertEqual(client_claims_bytes1, client_claims_bytes2) + def test_pac_int64_claims(self): + """Test that we can parse a PAC containing INT64 claims.""" + + # Decode the PAC. + pac = ndr_unpack(krb5pac.PAC_DATA, self.pac_data_int64_claim) + + # Get the PAC buffer which contains the client claims. + self.assertEqual(8, pac.num_buffers) + client_claims_buf = pac.buffers[5] + self.assertEqual(krb5pac.PAC_TYPE_CLIENT_CLAIMS_INFO, + client_claims_buf.type) + + # Ensure that we can decode the client claims. + client_claims_data = client_claims_buf.info.remaining + client_claims = ndr_unpack(claims.CLAIMS_SET_METADATA_NDR, + client_claims_data) + + claims_set = client_claims.claims.metadata.claims_set.claims.claims + + # We should find a single claims array, … + self.assertEqual(1, claims_set.claims_array_count) + claims_array = claims_set.claims_arrays[0] + self.assertEqual(claims.CLAIMS_SOURCE_TYPE_AD, + claims_array.claims_source_type) + + # …containing our INT64 claim. + self.assertEqual(1, claims_array.claims_count) + claim_entry = claims_array.claim_entries[0] + self.assertEqual('a claim', claim_entry.id) + self.assertEqual(claims.CLAIM_TYPE_INT64, claim_entry.type) + + # Ensure that the values have been decoded correctly. + self.assertEqual([3, 42, -999, 1000, 20000], claim_entry.values.values) + + # Re-encode the claims buffer and ensure that the result is identical + # to the original encoded claims produced by Windows. + client_claims_packed = ndr_pack(client_claims) + self.assertEqual(client_claims_data, client_claims_packed) + + if __name__ == '__main__': import unittest unittest.main() diff --git a/selftest/knownfail.d/claims-in-pac b/selftest/knownfail.d/claims-in-pac new file mode 100644 index 00000000000..4fc9abc1176 --- /dev/null +++ b/selftest/knownfail.d/claims-in-pac @@ -0,0 +1 @@ +^samba\.tests\.krb5\.claims_in_pac\.samba\.tests\.krb5\.claims_in_pac\.PacClaimsTests\.test_pac_int64_claims\(none\)$ -- 2.39.1 From 278cdb645a9a4f37e4afe90a35bbd2fafa2aaba5 Mon Sep 17 00:00:00 2001 From: Joseph Sutton Date: Tue, 15 Aug 2023 12:29:03 +1200 Subject: [PATCH 4/6] =?UTF-8?q?librpc:ndr:=20Add=20=E2=80=98int64=E2=80=99?= =?UTF-8?q?=20type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This type behaves like a signed variant of ‘hyper’. Unlike the existing ‘dlong’ type, which has four byte alignment, ‘int64’ is aligned to eight bytes. Bump the NDR version to 3.0.1. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15452 Signed-off-by: Joseph Sutton Reviewed-by: Andrew Bartlett (cherry picked from commit 402bb17693472a9c30f33a0bdf5f5f78df4066cc) --- librpc/ABI/ndr-3.0.1.sigs | 272 +++++++++++++++++++++++++++ librpc/ndr/libndr.h | 1 + librpc/ndr/ndr_basic.c | 43 +++++ librpc/wscript_build | 2 +- pidl/lib/Parse/Pidl/NDR.pm | 1 + pidl/lib/Parse/Pidl/Typelist.pm | 1 + pidl/lib/Parse/Pidl/Wireshark/NDR.pm | 1 + pidl/tests/ndr.pl | 3 +- pidl/tests/typelist.pl | 3 +- 9 files changed, 324 insertions(+), 3 deletions(-) create mode 100644 librpc/ABI/ndr-3.0.1.sigs diff --git a/librpc/ABI/ndr-3.0.1.sigs b/librpc/ABI/ndr-3.0.1.sigs new file mode 100644 index 00000000000..54aab1d56d4 --- /dev/null +++ b/librpc/ABI/ndr-3.0.1.sigs @@ -0,0 +1,272 @@ +GUID_all_zero: bool (const struct GUID *) +GUID_buf_string: char *(const struct GUID *, struct GUID_txt_buf *) +GUID_compare: int (const struct GUID *, const struct GUID *) +GUID_equal: bool (const struct GUID *, const struct GUID *) +GUID_from_data_blob: NTSTATUS (const DATA_BLOB *, struct GUID *) +GUID_from_ndr_blob: NTSTATUS (const DATA_BLOB *, struct GUID *) +GUID_from_string: NTSTATUS (const char *, struct GUID *) +GUID_hexstring: char *(TALLOC_CTX *, const struct GUID *) +GUID_random: struct GUID (void) +GUID_string: char *(TALLOC_CTX *, const struct GUID *) +GUID_string2: char *(TALLOC_CTX *, const struct GUID *) +GUID_to_ndr_blob: NTSTATUS (const struct GUID *, TALLOC_CTX *, DATA_BLOB *) +GUID_to_ndr_buf: NTSTATUS (const struct GUID *, struct GUID_ndr_buf *) +GUID_zero: struct GUID (void) +_ndr_pull_error: enum ndr_err_code (struct ndr_pull *, enum ndr_err_code, const char *, const char *, const char *, ...) +_ndr_push_error: enum ndr_err_code (struct ndr_push *, enum ndr_err_code, const char *, const char *, const char *, ...) +ndr_align_size: size_t (uint32_t, size_t) +ndr_charset_length: uint32_t (const void *, charset_t) +ndr_check_array_size: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t) +ndr_check_padding: void (struct ndr_pull *, size_t) +ndr_check_pipe_chunk_trailer: enum ndr_err_code (struct ndr_pull *, int, uint32_t) +ndr_check_steal_array_length: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t) +ndr_check_steal_array_size: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t) +ndr_check_string_terminator: enum ndr_err_code (struct ndr_pull *, uint32_t, uint32_t) +ndr_get_array_length: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t *) +ndr_get_array_size: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t *) +ndr_map_error2errno: int (enum ndr_err_code) +ndr_map_error2ntstatus: NTSTATUS (enum ndr_err_code) +ndr_map_error2string: const char *(enum ndr_err_code) +ndr_policy_handle_empty: bool (const struct policy_handle *) +ndr_policy_handle_equal: bool (const struct policy_handle *, const struct policy_handle *) +ndr_print_DATA_BLOB: void (struct ndr_print *, const char *, DATA_BLOB) +ndr_print_GUID: void (struct ndr_print *, const char *, const struct GUID *) +ndr_print_HRESULT: void (struct ndr_print *, const char *, HRESULT) +ndr_print_KRB5_EDATA_NTSTATUS: void (struct ndr_print *, const char *, const struct KRB5_EDATA_NTSTATUS *) +ndr_print_NTSTATUS: void (struct ndr_print *, const char *, NTSTATUS) +ndr_print_NTTIME: void (struct ndr_print *, const char *, NTTIME) +ndr_print_NTTIME_1sec: void (struct ndr_print *, const char *, NTTIME) +ndr_print_NTTIME_hyper: void (struct ndr_print *, const char *, NTTIME) +ndr_print_WERROR: void (struct ndr_print *, const char *, WERROR) +ndr_print_array_uint8: void (struct ndr_print *, const char *, const uint8_t *, uint32_t) +ndr_print_bad_level: void (struct ndr_print *, const char *, uint16_t) +ndr_print_bitmap_flag: void (struct ndr_print *, size_t, const char *, uint32_t, uint32_t) +ndr_print_bool: void (struct ndr_print *, const char *, const bool) +ndr_print_debug: bool (int, ndr_print_fn_t, const char *, void *, const char *, const char *) +ndr_print_debug_helper: void (struct ndr_print *, const char *, ...) +ndr_print_debugc: void (int, ndr_print_fn_t, const char *, void *) +ndr_print_debugc_helper: void (struct ndr_print *, const char *, ...) +ndr_print_dlong: void (struct ndr_print *, const char *, int64_t) +ndr_print_double: void (struct ndr_print *, const char *, double) +ndr_print_enum: void (struct ndr_print *, const char *, const char *, const char *, uint32_t) +ndr_print_function_debug: void (ndr_print_function_t, const char *, int, void *) +ndr_print_function_string: char *(TALLOC_CTX *, ndr_print_function_t, const char *, int, void *) +ndr_print_gid_t: void (struct ndr_print *, const char *, gid_t) +ndr_print_hyper: void (struct ndr_print *, const char *, uint64_t) +ndr_print_int16: void (struct ndr_print *, const char *, int16_t) +ndr_print_int32: void (struct ndr_print *, const char *, int32_t) +ndr_print_int3264: void (struct ndr_print *, const char *, int32_t) +ndr_print_int64: void (struct ndr_print *, const char *, int64_t) +ndr_print_int8: void (struct ndr_print *, const char *, int8_t) +ndr_print_ipv4address: void (struct ndr_print *, const char *, const char *) +ndr_print_ipv6address: void (struct ndr_print *, const char *, const char *) +ndr_print_ndr_syntax_id: void (struct ndr_print *, const char *, const struct ndr_syntax_id *) +ndr_print_netr_SamDatabaseID: void (struct ndr_print *, const char *, enum netr_SamDatabaseID) +ndr_print_netr_SchannelType: void (struct ndr_print *, const char *, enum netr_SchannelType) +ndr_print_null: void (struct ndr_print *) +ndr_print_pointer: void (struct ndr_print *, const char *, void *) +ndr_print_policy_handle: void (struct ndr_print *, const char *, const struct policy_handle *) +ndr_print_printf_helper: void (struct ndr_print *, const char *, ...) +ndr_print_ptr: void (struct ndr_print *, const char *, const void *) +ndr_print_set_switch_value: enum ndr_err_code (struct ndr_print *, const void *, uint32_t) +ndr_print_sockaddr_storage: void (struct ndr_print *, const char *, const struct sockaddr_storage *) +ndr_print_steal_switch_value: uint32_t (struct ndr_print *, const void *) +ndr_print_string: void (struct ndr_print *, const char *, const char *) +ndr_print_string_array: void (struct ndr_print *, const char *, const char **) +ndr_print_string_helper: void (struct ndr_print *, const char *, ...) +ndr_print_struct: void (struct ndr_print *, const char *, const char *) +ndr_print_struct_string: char *(TALLOC_CTX *, ndr_print_fn_t, const char *, void *) +ndr_print_svcctl_ServerType: void (struct ndr_print *, const char *, uint32_t) +ndr_print_time_t: void (struct ndr_print *, const char *, time_t) +ndr_print_timespec: void (struct ndr_print *, const char *, const struct timespec *) +ndr_print_timeval: void (struct ndr_print *, const char *, const struct timeval *) +ndr_print_udlong: void (struct ndr_print *, const char *, uint64_t) +ndr_print_udlongr: void (struct ndr_print *, const char *, uint64_t) +ndr_print_uid_t: void (struct ndr_print *, const char *, uid_t) +ndr_print_uint16: void (struct ndr_print *, const char *, uint16_t) +ndr_print_uint32: void (struct ndr_print *, const char *, uint32_t) +ndr_print_uint3264: void (struct ndr_print *, const char *, uint32_t) +ndr_print_uint8: void (struct ndr_print *, const char *, uint8_t) +ndr_print_union: void (struct ndr_print *, const char *, int, const char *) +ndr_print_union_debug: void (ndr_print_fn_t, const char *, uint32_t, void *) +ndr_print_union_string: char *(TALLOC_CTX *, ndr_print_fn_t, const char *, uint32_t, void *) +ndr_print_winreg_Data: void (struct ndr_print *, const char *, const union winreg_Data *) +ndr_print_winreg_Data_GPO: void (struct ndr_print *, const char *, const union winreg_Data_GPO *) +ndr_print_winreg_Type: void (struct ndr_print *, const char *, enum winreg_Type) +ndr_pull_DATA_BLOB: enum ndr_err_code (struct ndr_pull *, int, DATA_BLOB *) +ndr_pull_GUID: enum ndr_err_code (struct ndr_pull *, int, struct GUID *) +ndr_pull_HRESULT: enum ndr_err_code (struct ndr_pull *, int, HRESULT *) +ndr_pull_KRB5_EDATA_NTSTATUS: enum ndr_err_code (struct ndr_pull *, int, struct KRB5_EDATA_NTSTATUS *) +ndr_pull_NTSTATUS: enum ndr_err_code (struct ndr_pull *, int, NTSTATUS *) +ndr_pull_NTTIME: enum ndr_err_code (struct ndr_pull *, int, NTTIME *) +ndr_pull_NTTIME_1sec: enum ndr_err_code (struct ndr_pull *, int, NTTIME *) +ndr_pull_NTTIME_hyper: enum ndr_err_code (struct ndr_pull *, int, NTTIME *) +ndr_pull_WERROR: enum ndr_err_code (struct ndr_pull *, int, WERROR *) +ndr_pull_advance: enum ndr_err_code (struct ndr_pull *, uint32_t) +ndr_pull_align: enum ndr_err_code (struct ndr_pull *, size_t) +ndr_pull_append: enum ndr_err_code (struct ndr_pull *, DATA_BLOB *) +ndr_pull_array_length: enum ndr_err_code (struct ndr_pull *, const void *) +ndr_pull_array_size: enum ndr_err_code (struct ndr_pull *, const void *) +ndr_pull_array_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *, uint32_t) +ndr_pull_bytes: enum ndr_err_code (struct ndr_pull *, uint8_t *, uint32_t) +ndr_pull_charset: enum ndr_err_code (struct ndr_pull *, int, const char **, uint32_t, uint8_t, charset_t) +ndr_pull_charset_to_null: enum ndr_err_code (struct ndr_pull *, int, const char **, uint32_t, uint8_t, charset_t) +ndr_pull_dlong: enum ndr_err_code (struct ndr_pull *, int, int64_t *) +ndr_pull_double: enum ndr_err_code (struct ndr_pull *, int, double *) +ndr_pull_enum_uint16: enum ndr_err_code (struct ndr_pull *, int, uint16_t *) +ndr_pull_enum_uint1632: enum ndr_err_code (struct ndr_pull *, int, uint16_t *) +ndr_pull_enum_uint32: enum ndr_err_code (struct ndr_pull *, int, uint32_t *) +ndr_pull_enum_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *) +ndr_pull_generic_ptr: enum ndr_err_code (struct ndr_pull *, uint32_t *) +ndr_pull_get_relative_base_offset: uint32_t (struct ndr_pull *) +ndr_pull_gid_t: enum ndr_err_code (struct ndr_pull *, int, gid_t *) +ndr_pull_hyper: enum ndr_err_code (struct ndr_pull *, int, uint64_t *) +ndr_pull_init_blob: struct ndr_pull *(const DATA_BLOB *, TALLOC_CTX *) +ndr_pull_int16: enum ndr_err_code (struct ndr_pull *, int, int16_t *) +ndr_pull_int32: enum ndr_err_code (struct ndr_pull *, int, int32_t *) +ndr_pull_int64: enum ndr_err_code (struct ndr_pull *, int, int64_t *) +ndr_pull_int8: enum ndr_err_code (struct ndr_pull *, int, int8_t *) +ndr_pull_ipv4address: enum ndr_err_code (struct ndr_pull *, int, const char **) +ndr_pull_ipv6address: enum ndr_err_code (struct ndr_pull *, int, const char **) +ndr_pull_ndr_syntax_id: enum ndr_err_code (struct ndr_pull *, int, struct ndr_syntax_id *) +ndr_pull_netr_SamDatabaseID: enum ndr_err_code (struct ndr_pull *, int, enum netr_SamDatabaseID *) +ndr_pull_netr_SchannelType: enum ndr_err_code (struct ndr_pull *, int, enum netr_SchannelType *) +ndr_pull_pointer: enum ndr_err_code (struct ndr_pull *, int, void **) +ndr_pull_policy_handle: enum ndr_err_code (struct ndr_pull *, int, struct policy_handle *) +ndr_pull_pop: enum ndr_err_code (struct ndr_pull *) +ndr_pull_ref_ptr: enum ndr_err_code (struct ndr_pull *, uint32_t *) +ndr_pull_relative_ptr1: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t) +ndr_pull_relative_ptr2: enum ndr_err_code (struct ndr_pull *, const void *) +ndr_pull_relative_ptr_short: enum ndr_err_code (struct ndr_pull *, uint16_t *) +ndr_pull_restore_relative_base_offset: void (struct ndr_pull *, uint32_t) +ndr_pull_set_switch_value: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t) +ndr_pull_setup_relative_base_offset1: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t) +ndr_pull_setup_relative_base_offset2: enum ndr_err_code (struct ndr_pull *, const void *) +ndr_pull_steal_switch_value: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t *) +ndr_pull_string: enum ndr_err_code (struct ndr_pull *, int, const char **) +ndr_pull_string_array: enum ndr_err_code (struct ndr_pull *, int, const char ***) +ndr_pull_struct_blob: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, ndr_pull_flags_fn_t) +ndr_pull_struct_blob_all: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, ndr_pull_flags_fn_t) +ndr_pull_struct_blob_all_noalloc: enum ndr_err_code (const DATA_BLOB *, void *, ndr_pull_flags_fn_t) +ndr_pull_subcontext_end: enum ndr_err_code (struct ndr_pull *, struct ndr_pull *, size_t, ssize_t) +ndr_pull_subcontext_start: enum ndr_err_code (struct ndr_pull *, struct ndr_pull **, size_t, ssize_t) +ndr_pull_svcctl_ServerType: enum ndr_err_code (struct ndr_pull *, int, uint32_t *) +ndr_pull_time_t: enum ndr_err_code (struct ndr_pull *, int, time_t *) +ndr_pull_timespec: enum ndr_err_code (struct ndr_pull *, int, struct timespec *) +ndr_pull_timeval: enum ndr_err_code (struct ndr_pull *, int, struct timeval *) +ndr_pull_trailer_align: enum ndr_err_code (struct ndr_pull *, size_t) +ndr_pull_udlong: enum ndr_err_code (struct ndr_pull *, int, uint64_t *) +ndr_pull_udlongr: enum ndr_err_code (struct ndr_pull *, int, uint64_t *) +ndr_pull_uid_t: enum ndr_err_code (struct ndr_pull *, int, uid_t *) +ndr_pull_uint16: enum ndr_err_code (struct ndr_pull *, int, uint16_t *) +ndr_pull_uint1632: enum ndr_err_code (struct ndr_pull *, int, uint16_t *) +ndr_pull_uint32: enum ndr_err_code (struct ndr_pull *, int, uint32_t *) +ndr_pull_uint3264: enum ndr_err_code (struct ndr_pull *, int, uint32_t *) +ndr_pull_uint8: enum ndr_err_code (struct ndr_pull *, int, uint8_t *) +ndr_pull_union_align: enum ndr_err_code (struct ndr_pull *, size_t) +ndr_pull_union_blob: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_pull_flags_fn_t) +ndr_pull_union_blob_all: enum ndr_err_code (const DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_pull_flags_fn_t) +ndr_pull_winreg_Data: enum ndr_err_code (struct ndr_pull *, int, union winreg_Data *) +ndr_pull_winreg_Data_GPO: enum ndr_err_code (struct ndr_pull *, int, union winreg_Data_GPO *) +ndr_pull_winreg_Type: enum ndr_err_code (struct ndr_pull *, int, enum winreg_Type *) +ndr_push_DATA_BLOB: enum ndr_err_code (struct ndr_push *, int, DATA_BLOB) +ndr_push_GUID: enum ndr_err_code (struct ndr_push *, int, const struct GUID *) +ndr_push_HRESULT: enum ndr_err_code (struct ndr_push *, int, HRESULT) +ndr_push_KRB5_EDATA_NTSTATUS: enum ndr_err_code (struct ndr_push *, int, const struct KRB5_EDATA_NTSTATUS *) +ndr_push_NTSTATUS: enum ndr_err_code (struct ndr_push *, int, NTSTATUS) +ndr_push_NTTIME: enum ndr_err_code (struct ndr_push *, int, NTTIME) +ndr_push_NTTIME_1sec: enum ndr_err_code (struct ndr_push *, int, NTTIME) +ndr_push_NTTIME_hyper: enum ndr_err_code (struct ndr_push *, int, NTTIME) +ndr_push_WERROR: enum ndr_err_code (struct ndr_push *, int, WERROR) +ndr_push_align: enum ndr_err_code (struct ndr_push *, size_t) +ndr_push_array_uint8: enum ndr_err_code (struct ndr_push *, int, const uint8_t *, uint32_t) +ndr_push_blob: DATA_BLOB (struct ndr_push *) +ndr_push_bytes: enum ndr_err_code (struct ndr_push *, const uint8_t *, uint32_t) +ndr_push_charset: enum ndr_err_code (struct ndr_push *, int, const char *, uint32_t, uint8_t, charset_t) +ndr_push_charset_to_null: enum ndr_err_code (struct ndr_push *, int, const char *, uint32_t, uint8_t, charset_t) +ndr_push_dlong: enum ndr_err_code (struct ndr_push *, int, int64_t) +ndr_push_double: enum ndr_err_code (struct ndr_push *, int, double) +ndr_push_enum_uint16: enum ndr_err_code (struct ndr_push *, int, uint16_t) +ndr_push_enum_uint1632: enum ndr_err_code (struct ndr_push *, int, uint16_t) +ndr_push_enum_uint32: enum ndr_err_code (struct ndr_push *, int, uint32_t) +ndr_push_enum_uint8: enum ndr_err_code (struct ndr_push *, int, uint8_t) +ndr_push_expand: enum ndr_err_code (struct ndr_push *, uint32_t) +ndr_push_full_ptr: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_get_relative_base_offset: uint32_t (struct ndr_push *) +ndr_push_gid_t: enum ndr_err_code (struct ndr_push *, int, gid_t) +ndr_push_hyper: enum ndr_err_code (struct ndr_push *, int, uint64_t) +ndr_push_init_ctx: struct ndr_push *(TALLOC_CTX *) +ndr_push_int16: enum ndr_err_code (struct ndr_push *, int, int16_t) +ndr_push_int32: enum ndr_err_code (struct ndr_push *, int, int32_t) +ndr_push_int64: enum ndr_err_code (struct ndr_push *, int, int64_t) +ndr_push_int8: enum ndr_err_code (struct ndr_push *, int, int8_t) +ndr_push_ipv4address: enum ndr_err_code (struct ndr_push *, int, const char *) +ndr_push_ipv6address: enum ndr_err_code (struct ndr_push *, int, const char *) +ndr_push_ndr_syntax_id: enum ndr_err_code (struct ndr_push *, int, const struct ndr_syntax_id *) +ndr_push_netr_SamDatabaseID: enum ndr_err_code (struct ndr_push *, int, enum netr_SamDatabaseID) +ndr_push_netr_SchannelType: enum ndr_err_code (struct ndr_push *, int, enum netr_SchannelType) +ndr_push_pipe_chunk_trailer: enum ndr_err_code (struct ndr_push *, int, uint32_t) +ndr_push_pointer: enum ndr_err_code (struct ndr_push *, int, void *) +ndr_push_policy_handle: enum ndr_err_code (struct ndr_push *, int, const struct policy_handle *) +ndr_push_ref_ptr: enum ndr_err_code (struct ndr_push *) +ndr_push_relative_ptr1: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_relative_ptr2_end: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_relative_ptr2_start: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_restore_relative_base_offset: void (struct ndr_push *, uint32_t) +ndr_push_set_switch_value: enum ndr_err_code (struct ndr_push *, const void *, uint32_t) +ndr_push_setup_relative_base_offset1: enum ndr_err_code (struct ndr_push *, const void *, uint32_t) +ndr_push_setup_relative_base_offset2: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_short_relative_ptr1: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_short_relative_ptr2: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_steal_switch_value: enum ndr_err_code (struct ndr_push *, const void *, uint32_t *) +ndr_push_string: enum ndr_err_code (struct ndr_push *, int, const char *) +ndr_push_string_array: enum ndr_err_code (struct ndr_push *, int, const char **) +ndr_push_struct_blob: enum ndr_err_code (DATA_BLOB *, TALLOC_CTX *, const void *, ndr_push_flags_fn_t) +ndr_push_struct_into_fixed_blob: enum ndr_err_code (DATA_BLOB *, const void *, ndr_push_flags_fn_t) +ndr_push_subcontext_end: enum ndr_err_code (struct ndr_push *, struct ndr_push *, size_t, ssize_t) +ndr_push_subcontext_start: enum ndr_err_code (struct ndr_push *, struct ndr_push **, size_t, ssize_t) +ndr_push_svcctl_ServerType: enum ndr_err_code (struct ndr_push *, int, uint32_t) +ndr_push_time_t: enum ndr_err_code (struct ndr_push *, int, time_t) +ndr_push_timespec: enum ndr_err_code (struct ndr_push *, int, const struct timespec *) +ndr_push_timeval: enum ndr_err_code (struct ndr_push *, int, const struct timeval *) +ndr_push_trailer_align: enum ndr_err_code (struct ndr_push *, size_t) +ndr_push_udlong: enum ndr_err_code (struct ndr_push *, int, uint64_t) +ndr_push_udlongr: enum ndr_err_code (struct ndr_push *, int, uint64_t) +ndr_push_uid_t: enum ndr_err_code (struct ndr_push *, int, uid_t) +ndr_push_uint16: enum ndr_err_code (struct ndr_push *, int, uint16_t) +ndr_push_uint1632: enum ndr_err_code (struct ndr_push *, int, uint16_t) +ndr_push_uint32: enum ndr_err_code (struct ndr_push *, int, uint32_t) +ndr_push_uint3264: enum ndr_err_code (struct ndr_push *, int, uint32_t) +ndr_push_uint8: enum ndr_err_code (struct ndr_push *, int, uint8_t) +ndr_push_union_align: enum ndr_err_code (struct ndr_push *, size_t) +ndr_push_union_blob: enum ndr_err_code (DATA_BLOB *, TALLOC_CTX *, void *, uint32_t, ndr_push_flags_fn_t) +ndr_push_unique_ptr: enum ndr_err_code (struct ndr_push *, const void *) +ndr_push_winreg_Data: enum ndr_err_code (struct ndr_push *, int, const union winreg_Data *) +ndr_push_winreg_Data_GPO: enum ndr_err_code (struct ndr_push *, int, const union winreg_Data_GPO *) +ndr_push_winreg_Type: enum ndr_err_code (struct ndr_push *, int, enum winreg_Type) +ndr_push_zero: enum ndr_err_code (struct ndr_push *, uint32_t) +ndr_set_flags: void (uint32_t *, uint32_t) +ndr_size_DATA_BLOB: uint32_t (int, const DATA_BLOB *, int) +ndr_size_GUID: size_t (const struct GUID *, int) +ndr_size_string: uint32_t (int, const char * const *, int) +ndr_size_string_array: size_t (const char **, uint32_t, int) +ndr_size_struct: size_t (const void *, int, ndr_push_flags_fn_t) +ndr_size_union: size_t (const void *, int, uint32_t, ndr_push_flags_fn_t) +ndr_size_winreg_Data_GPO: size_t (const union winreg_Data_GPO *, uint32_t, int) +ndr_steal_array_length: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t *) +ndr_steal_array_size: enum ndr_err_code (struct ndr_pull *, const void *, uint32_t *) +ndr_string_array_size: size_t (struct ndr_push *, const char *) +ndr_string_length: uint32_t (const void *, uint32_t) +ndr_syntax_id_buf_string: char *(const struct ndr_syntax_id *, struct ndr_syntax_id_buf *) +ndr_syntax_id_equal: bool (const struct ndr_syntax_id *, const struct ndr_syntax_id *) +ndr_syntax_id_from_string: bool (const char *, struct ndr_syntax_id *) +ndr_syntax_id_null: uuid = {time_low = 0, time_mid = 0, time_hi_and_version = 0, clock_seq = "\000", node = "\000\000\000\000\000"}, if_version = 0 +ndr_syntax_id_to_string: char *(TALLOC_CTX *, const struct ndr_syntax_id *) +ndr_token_max_list_size: size_t (void) +ndr_token_peek: enum ndr_err_code (struct ndr_token_list *, const void *, uint32_t *) +ndr_token_retrieve: enum ndr_err_code (struct ndr_token_list *, const void *, uint32_t *) +ndr_token_retrieve_cmp_fn: enum ndr_err_code (struct ndr_token_list *, const void *, uint32_t *, comparison_fn_t, bool) +ndr_token_store: enum ndr_err_code (TALLOC_CTX *, struct ndr_token_list *, const void *, uint32_t) +ndr_transfer_syntax_ndr: uuid = {time_low = 2324192516, time_mid = 7403, time_hi_and_version = 4553, clock_seq = "\237\350", node = "\b\000+\020H`"}, if_version = 2 +ndr_transfer_syntax_ndr64: uuid = {time_low = 1903232307, time_mid = 48826, time_hi_and_version = 18743, clock_seq = "\203\031", node = "\265\333\357\234\314\066"}, if_version = 1 +ndr_zero_memory: void (void *, size_t) diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h index 556d17f68c7..32a34a08a2b 100644 --- a/librpc/ndr/libndr.h +++ b/librpc/ndr/libndr.h @@ -750,6 +750,7 @@ NDR_SCALAR_PROTO(udlong, uint64_t) NDR_SCALAR_PROTO(udlongr, uint64_t) NDR_SCALAR_PROTO(dlong, int64_t) NDR_SCALAR_PROTO(hyper, uint64_t) +NDR_SCALAR_PROTO(int64, int64_t) NDR_SCALAR_PROTO(pointer, void *) NDR_SCALAR_PROTO(time_t, time_t) NDR_SCALAR_PROTO(uid_t, uid_t) diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index 39aa3690cbe..ecd66a8fa39 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -36,6 +36,9 @@ #define NDR_PULL_I32(ndr, ofs) \ (int32_t)(NDR_BE(ndr) ? PULL_BE_U32(ndr->data,ofs) : PULL_LE_U32(ndr->data,ofs)) +#define NDR_PULL_I64(ndr, ofs) \ + (NDR_BE(ndr) ? PULL_BE_I64((ndr)->data, (ofs)) : PULL_LE_I64((ndr)->data, (ofs))) + #define NDR_PUSH_U16(ndr, ofs, v) \ do { \ if (NDR_BE(ndr)) { \ @@ -63,6 +66,15 @@ } \ } while (0) +#define NDR_PUSH_I64(ndr, ofs, v) \ + do { \ + if (NDR_BE(ndr)) { \ + PUSH_BE_I64((ndr)->data, (ofs), (v)); \ + } else { \ + PUSH_LE_I64((ndr)->data, (ofs), (v)); \ + } \ + } while (0) + static void ndr_dump_data(struct ndr_print *ndr, const uint8_t *buf, int len); /* @@ -306,6 +318,19 @@ _PUBLIC_ enum ndr_err_code ndr_pull_hyper(struct ndr_pull *ndr, int ndr_flags, u return ndr_pull_udlong(ndr, ndr_flags, v); } +/* + parse an int64 +*/ +_PUBLIC_ enum ndr_err_code ndr_pull_int64(struct ndr_pull *ndr, int ndr_flags, int64_t *v) +{ + NDR_PULL_CHECK_FLAGS(ndr, ndr_flags); + NDR_PULL_ALIGN(ndr, 8); + NDR_PULL_NEED_BYTES(ndr, 8); + *v = NDR_PULL_I64(ndr, ndr->offset); + ndr->offset += 8; + return NDR_ERR_SUCCESS; +} + /* parse a pointer */ @@ -643,6 +668,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_hyper(struct ndr_push *ndr, int ndr_flags, u return ndr_push_udlong(ndr, NDR_SCALARS, v); } +/* + push an int64 +*/ +_PUBLIC_ enum ndr_err_code ndr_push_int64(struct ndr_push *ndr, int ndr_flags, int64_t v) +{ + NDR_PUSH_CHECK_FLAGS(ndr, ndr_flags); + NDR_PUSH_ALIGN(ndr, 8); + NDR_PUSH_NEED_BYTES(ndr, 8); + NDR_PUSH_I64(ndr, ndr->offset, v); + ndr->offset += 8; + return NDR_ERR_SUCCESS; +} + /* push a double */ @@ -1210,6 +1248,11 @@ _PUBLIC_ void ndr_print_hyper(struct ndr_print *ndr, const char *name, uint64_t ndr_print_dlong(ndr, name, v); } +_PUBLIC_ void ndr_print_int64(struct ndr_print *ndr, const char *name, int64_t v) +{ + ndr_print_dlong(ndr, name, v); +} + _PUBLIC_ void ndr_print_pointer(struct ndr_print *ndr, const char *name, void *v) { ndr->print(ndr, "%-25s: %p", name, v); diff --git a/librpc/wscript_build b/librpc/wscript_build index 713df25229e..3cbb5ff78e6 100644 --- a/librpc/wscript_build +++ b/librpc/wscript_build @@ -628,7 +628,7 @@ bld.SAMBA_LIBRARY('ndr', public_deps='samba-errors talloc samba-util util_str_hex', public_headers='gen_ndr/misc.h gen_ndr/ndr_misc.h ndr/libndr.h:ndr.h', header_path= [('*gen_ndr*', 'gen_ndr')], - vnum='3.0.0', + vnum='3.0.1', abi_directory='ABI', abi_match='!ndr_table_* ndr_* GUID_* _ndr_pull_error* _ndr_push_error*', ) diff --git a/pidl/lib/Parse/Pidl/NDR.pm b/pidl/lib/Parse/Pidl/NDR.pm index d17d0b404ed..7a91dc0d84e 100644 --- a/pidl/lib/Parse/Pidl/NDR.pm +++ b/pidl/lib/Parse/Pidl/NDR.pm @@ -58,6 +58,7 @@ my $scalar_alignment = { 'int3264' => 5, 'uint3264' => 5, 'hyper' => 8, + 'int64' => 8, 'double' => 8, 'pointer' => 8, 'dlong' => 4, diff --git a/pidl/lib/Parse/Pidl/Typelist.pm b/pidl/lib/Parse/Pidl/Typelist.pm index 2b850ffee4b..c0e07b97986 100644 --- a/pidl/lib/Parse/Pidl/Typelist.pm +++ b/pidl/lib/Parse/Pidl/Typelist.pm @@ -46,6 +46,7 @@ my %scalars = ( "int3264" => "int32_t", "uint3264" => "uint32_t", "hyper" => "uint64_t", + "int64" => "int64_t", "dlong" => "int64_t", "udlong" => "uint64_t", "udlongr" => "uint64_t", diff --git a/pidl/lib/Parse/Pidl/Wireshark/NDR.pm b/pidl/lib/Parse/Pidl/Wireshark/NDR.pm index 59cbba8251a..83fe6cf2c27 100644 --- a/pidl/lib/Parse/Pidl/Wireshark/NDR.pm +++ b/pidl/lib/Parse/Pidl/Wireshark/NDR.pm @@ -1080,6 +1080,7 @@ sub Initialize($$) $self->register_type("uint3264", "offset = dissect_ndr_uint3264(tvb, offset, pinfo, tree, di, drep, \@HF\@, NULL);", "FT_UINT32", "BASE_DEC", 0, "NULL", 8); $self->register_type("hyper", "offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, di, drep, \@HF\@, NULL);", "FT_UINT64", "BASE_DEC", 0, "NULL", 8); + $self->register_type("int64", "offset = dissect_ndr_uint64(tvb, offset, pinfo, tree, di, drep, \@HF\@, NULL);", "FT_INT64", "BASE_DEC", 0, "NULL", 8); $self->register_type("udlong", "offset = dissect_ndr_duint32(tvb, offset, pinfo, tree, di, drep, \@HF\@, NULL);", "FT_UINT64", "BASE_DEC", 0, "NULL", 4); $self->register_type("bool8", "offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, \@HF\@, \@PARAM\@);","FT_INT8", "BASE_DEC", 0, "NULL", 1); $self->register_type("char", "offset = PIDL_dissect_uint8(tvb, offset, pinfo, tree, di, drep, \@HF\@, \@PARAM\@);","FT_INT8", "BASE_DEC", 0, "NULL", 1); diff --git a/pidl/tests/ndr.pl b/pidl/tests/ndr.pl index b6fd4899b01..8f84545290c 100755 --- a/pidl/tests/ndr.pl +++ b/pidl/tests/ndr.pl @@ -4,7 +4,7 @@ use strict; use warnings; -use Test::More tests => 47; +use Test::More tests => 48; use FindBin qw($RealBin); use lib "$RealBin"; use Util; @@ -480,6 +480,7 @@ $ne = ParseElement($e, undef, 0); is($ne->{REPRESENTATION_TYPE}, "uint8"); is(align_type("hyper"), 8); +is(align_type("int64"), 8); is(align_type("double"), 8); is(align_type("uint32"), 4); is(align_type("uint16"), 2); diff --git a/pidl/tests/typelist.pl b/pidl/tests/typelist.pl index 681c0eacfda..5fc3ca25e06 100755 --- a/pidl/tests/typelist.pl +++ b/pidl/tests/typelist.pl @@ -4,7 +4,7 @@ use strict; use warnings; -use Test::More tests => 56; +use Test::More tests => 57; use FindBin qw($RealBin); use lib "$RealBin"; use Util; @@ -21,6 +21,7 @@ is("int32", expandAlias("int32")); is("uint32_t", mapScalarType("uint32")); is("void", mapScalarType("void")); is("uint64_t", mapScalarType("hyper")); +is("int64_t", mapScalarType("int64")); is("double", mapScalarType("double")); my $x = { TYPE => "ENUM", NAME => "foo", EXTRADATA => 1 }; -- 2.39.1 From 2ffeb7a34a9654b74fcf40c12b6853ff5927c54d Mon Sep 17 00:00:00 2001 From: Joseph Sutton Date: Tue, 15 Aug 2023 12:31:54 +1200 Subject: [PATCH 5/6] =?UTF-8?q?claims.idl:=20Use=20=E2=80=98int64=E2=80=99?= =?UTF-8?q?=20instead=20of=20=E2=80=98dlong=E2=80=99=20for=20INT64=20claim?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This field is supposed to be aligned to eight bytes, but the ‘dlong’ type is aligned to only four bytes. This discrepancy resulted in claims being encoded and decoded incorrectly. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15452 Signed-off-by: Joseph Sutton Reviewed-by: Andrew Bartlett (cherry picked from commit aa1815519ce1412cdf25927b54b5178113cdd2a7) --- librpc/idl/claims.idl | 2 +- selftest/knownfail.d/claims-in-pac | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 selftest/knownfail.d/claims-in-pac diff --git a/librpc/idl/claims.idl b/librpc/idl/claims.idl index 90ea15585c1..196db5785a0 100644 --- a/librpc/idl/claims.idl +++ b/librpc/idl/claims.idl @@ -50,7 +50,7 @@ interface claims typedef struct { [range(1, 10*1024*1024)] uint32 value_count; - [size_is(value_count)] dlong *values; + [size_is(value_count)] int64 *values; } CLAIM_INT64; typedef struct { diff --git a/selftest/knownfail.d/claims-in-pac b/selftest/knownfail.d/claims-in-pac deleted file mode 100644 index 4fc9abc1176..00000000000 --- a/selftest/knownfail.d/claims-in-pac +++ /dev/null @@ -1 +0,0 @@ -^samba\.tests\.krb5\.claims_in_pac\.samba\.tests\.krb5\.claims_in_pac\.PacClaimsTests\.test_pac_int64_claims\(none\)$ -- 2.39.1 From 1a2e5079d1bae9e676e718834e619d7a6c581cd0 Mon Sep 17 00:00:00 2001 From: Joseph Sutton Date: Tue, 15 Aug 2023 12:36:05 +1200 Subject: [PATCH 6/6] tests/krb5: Remove incorrect comments Now that the INT64 claim IDL definition has been corrected, these tests should pass against Windows. BUG: https://bugzilla.samba.org/show_bug.cgi?id=15452 Signed-off-by: Joseph Sutton Reviewed-by: Andrew Bartlett Autobuild-User(master): Andrew Bartlett Autobuild-Date(master): Tue Aug 15 19:41:50 UTC 2023 on atb-devel-224 (cherry picked from commit 37fdd79cc0b83b44cb4d4c457fbb8e7410655b24) --- python/samba/tests/krb5/claims_tests.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/python/samba/tests/krb5/claims_tests.py b/python/samba/tests/krb5/claims_tests.py index d19255b7a54..8df4595079d 100755 --- a/python/samba/tests/krb5/claims_tests.py +++ b/python/samba/tests/krb5/claims_tests.py @@ -1002,8 +1002,6 @@ class ClaimsTests(KDCBaseTest): 'class': 'user', }, { - # This test fails on Windows, which for an integer syntax claim - # issues corrupt data shifted four bytes to the right. 'name': 'integer syntax', 'claims': [ { @@ -1021,8 +1019,6 @@ class ClaimsTests(KDCBaseTest): 'class': 'user', }, { - # This test fails on Windows, which for an integer syntax claim - # issues corrupt data that cannot be NDR unpacked. 'name': 'integer syntax, duplicate claim', 'claims': [ { -- 2.39.1