Author: tpot Date: 2005-01-03 23:38:34 +0000 (Mon, 03 Jan 2005) New Revision: 159
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=lorikeet&rev=159 Log: Register field info for subcontext sizes, array length and offset, and num auths. samr now completely decodes! Modified: trunk/ethereal/plugins/pidl/eparser.c Changeset: Modified: trunk/ethereal/plugins/pidl/eparser.c =================================================================== --- trunk/ethereal/plugins/pidl/eparser.c 2005-01-03 23:30:15 UTC (rev 158) +++ trunk/ethereal/plugins/pidl/eparser.c 2005-01-03 23:38:34 UTC (rev 159) @@ -563,29 +563,6 @@ return ndr_token_peek(&ndr->array_size_list, p); } -void proto_register_eparser(void) -{ - static hf_register_info hf[] = { - { &hf_string4_len, { "Length", "eparser.string4_length", FT_UINT32, BASE_DEC, NULL, 0x0, "String4 length", HFILL }}, - { &hf_string4_offset, { "Offset", "eparser.string4_offset", FT_UINT32, BASE_DEC, NULL, 0x0, "String4 offset", HFILL }}, - { &hf_string4_len2, { "Length2", "eparser.string4_length2", FT_UINT32, BASE_DEC, NULL, 0x0, "String4 length2", HFILL }}, - { &hf_string_data, { "Data", "eparser.string_data", FT_NONE, BASE_NONE, NULL, 0x0, "String data", HFILL }}, - { &hf_array_size, { "Array size", "eparser.array_size", FT_UINT32, BASE_DEC, NULL, 0x0, "Array size", HFILL }}, - { &hf_array_uint8, { "Uint8 array value", "eparser.uint8_array", FT_UINT8, BASE_DEC, NULL, 0x0, "Uint8 array value", HFILL }}, - { &hf_array_uint32, { "Uint32 array value", "eparser.uint32_array", FT_UINT32, BASE_DEC, NULL, 0x0, "Uint32 array value", HFILL }}, - }; - - static gint *ett[] = { - &ett_array, - }; - - int proto_dcerpc; - - proto_dcerpc = proto_get_id_by_filter_name("dcerpc"); - proto_register_field_array(proto_dcerpc, hf, array_length(hf)); - proto_register_subtree_array(ett, array_length(ett)); -} - NTSTATUS ndr_pull_relative1(struct pidl_pull *ndr, const void *p, uint32_t rel_offset) { if (ndr->flags & LIBNDR_FLAG_RELATIVE_CURRENT) { @@ -622,7 +599,8 @@ } -static int hf_subcontext_size = -1; +static int hf_subcontext_size16 = -1; +static int hf_subcontext_size32 = -1; /* handle subcontext buffers, which in midl land are user-marshalled, but @@ -643,7 +621,7 @@ case 2: { uint16_t size; - ndr_pull_uint16(ndr, tree, hf_subcontext_size, &size); + ndr_pull_uint16(ndr, tree, hf_subcontext_size16, &size); if (size == 0) return NT_STATUS_OK; ndr_pull_subcontext(ndr, ndr2, size); break; @@ -651,7 +629,7 @@ case 4: { uint32_t size; - ndr_pull_uint32(ndr, tree, hf_subcontext_size, &size); + ndr_pull_uint32(ndr, tree, hf_subcontext_size32, &size); if (size == 0) return NT_STATUS_OK; ndr_pull_subcontext(ndr, ndr2, size); break; @@ -774,3 +752,32 @@ } gint hf_conformant_size = -1; + +void proto_register_eparser(void) +{ + static hf_register_info hf[] = { + { &hf_string4_len, { "Length", "eparser.string4_length", FT_UINT32, BASE_DEC, NULL, 0x0, "String4 length", HFILL }}, + { &hf_string4_offset, { "Offset", "eparser.string4_offset", FT_UINT32, BASE_DEC, NULL, 0x0, "String4 offset", HFILL }}, + { &hf_string4_len2, { "Length2", "eparser.string4_length2", FT_UINT32, BASE_DEC, NULL, 0x0, "String4 length2", HFILL }}, + { &hf_string_data, { "Data", "eparser.string_data", FT_NONE, BASE_NONE, NULL, 0x0, "String data", HFILL }}, + { &hf_array_size, { "Array size", "eparser.array_size", FT_UINT32, BASE_DEC, NULL, 0x0, "Array size", HFILL }}, + { &hf_array_length, { "Array length", "eparser.array_length", FT_UINT32, BASE_DEC, NULL, 0x0, "Array length", HFILL }}, + { &hf_array_offset, { "Array offset", "eparser.array_offset", FT_UINT32, BASE_DEC, NULL, 0x0, "Array offset", HFILL }}, + { &hf_array_uint8, { "Uint8 array value", "eparser.uint8_array", FT_UINT8, BASE_DEC, NULL, 0x0, "Uint8 array value", HFILL }}, + { &hf_array_uint32, { "Uint32 array value", "eparser.uint32_array", FT_UINT32, BASE_DEC, NULL, 0x0, "Uint32 array value", HFILL }}, + { &hf_subcontext_size16, { "Uint16 subcontext", "eparser.subcontext16", FT_UINT16, BASE_DEC, NULL, 0x0, "Uint16 subcontext", HFILL }}, + { &hf_subcontext_size32, { "Uint32 subcontext", "eparser.subcontext32", FT_UINT32, BASE_DEC, NULL, 0x0, "Uint32 subcontext", HFILL }}, + { &hf_dom_sid2_num_auths, { "dom_sid2 num auths", "eparser.num_auths", FT_UINT32, BASE_DEC, NULL, 0x0, "dom_sid2 num auths", HFILL }}, + }; + + static gint *ett[] = { + &ett_array, + }; + + int proto_dcerpc; + + proto_dcerpc = proto_get_id_by_filter_name("dcerpc"); + proto_register_field_array(proto_dcerpc, hf, array_length(hf)); + proto_register_subtree_array(ett, array_length(ett)); +} +