/src/wireshark/epan/dissectors/packet-dcerpc-rs_pgo.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* packet-dcerpc-rs_pgo.c |
2 | | * |
3 | | * Routines for dcerpc Afs4Int dissection |
4 | | * Copyright 2002, Jaime Fournier <Jaime.Fournier@hush.com> |
5 | | * This information is based off the released idl files from opengroup. |
6 | | * ftp://ftp.opengroup.org/pub/dce122/dce/src/security.tar.gz security/idl/rs_pgo.idl |
7 | | * |
8 | | * Wireshark - Network traffic analyzer |
9 | | * By Gerald Combs <gerald@wireshark.org> |
10 | | * Copyright 1998 Gerald Combs |
11 | | * |
12 | | * SPDX-License-Identifier: GPL-2.0-or-later |
13 | | */ |
14 | | |
15 | | #include "config.h" |
16 | | |
17 | | |
18 | | #include <epan/packet.h> |
19 | | #include "packet-dcerpc.h" |
20 | | #include "packet-dcerpc-dce122.h" |
21 | | |
22 | | void proto_register_rs_pgo (void); |
23 | | void proto_reg_handoff_rs_pgo (void); |
24 | | |
25 | | /* |
26 | | delete |
27 | | dissect_rgy_acct_user_flags_t |
28 | | */ |
29 | | |
30 | | static int proto_rs_pgo; |
31 | | static int hf_rs_pgo_opnum; |
32 | | static int hf_rs_var1; |
33 | | static int hf_rs_pgo_query_result_t; |
34 | | static int hf_rs_pgo_query_t; |
35 | | static int hf_rs_pgo_query_key_t; |
36 | | static int hf_error_status_t; |
37 | | static int hf_sec_rgy_pgo_flags_t; |
38 | | static int hf_rs_sec_rgy_pgo_item_t_quota; |
39 | | static int hf_rs_sec_rgy_pgo_item_t_unix_num; |
40 | | static int hf_rs_timeval; |
41 | | static int hf_rs_uuid1; |
42 | | static int hf_sec_rgy_domain_t; |
43 | | static int hf_sec_rgy_name_t_principalName_string; |
44 | | static int hf_sec_rgy_name_t_size; |
45 | | static int hf_sec_rgy_pname_t_principalName_string; |
46 | | static int hf_sec_rgy_pname_t_size; |
47 | | static int hf_rs_pgo_unix_num_key_t; |
48 | | |
49 | | static int ett_rs_cache_data_t; |
50 | | static int ett_sec_rgy_domain_t; |
51 | | static int ett_rgy_acct_user_flags_t; |
52 | | static int ett_sec_attr_component_name_t; |
53 | | static int ett_sec_passwd_type_t; |
54 | | static int ett_sec_rgy_acct_admin_flags_t; |
55 | | static int ett_sec_rgy_acct_admin_t; |
56 | | static int ett_sec_rgy_acct_auth_flags_t; |
57 | | static int ett_sec_rgy_acct_key_t; |
58 | | static int ett_sec_rgy_acct_user_t; |
59 | | static int ett_sec_rgy_cursor_t; |
60 | | static int ett_sec_rgy_foreign_id_t; |
61 | | static int ett_sec_rgy_login_name_t; |
62 | | static int ett_sec_rgy_name_t; |
63 | | static int ett_sec_rgy_pgo_item_t; |
64 | | static int ett_sec_rgy_pname_t; |
65 | | static int ett_sec_rgy_sid_t; |
66 | | static int ett_sec_rgy_unix_passwd_buf_t; |
67 | | static int ett_sec_rgy_unix_sid_t; |
68 | | static int ett_sec_timeval_sec_t; |
69 | | static int ett_sec_rgy_pgo_flags_t; |
70 | | static int ett_error_status_t; |
71 | | static int ett_rs_pgo_query_t; |
72 | | static int ett_rs_pgo_query_key_t; |
73 | | static int ett_rs_pgo_id_key_t; |
74 | | static int ett_rs_pgo_unix_num_key_t; |
75 | | static int ett_rs_pgo_query_result_t; |
76 | | static int ett_rs_pgo_result_t; |
77 | | |
78 | | |
79 | | #define sec_rgy_acct_admin_valid 0x01 |
80 | | #define sec_rgy_acct_admin_audit 0x02 |
81 | | #define sec_rgy_acct_admin_server 0x04 |
82 | 0 | #define sec_rgy_acct_admin_client 0x08 |
83 | | #define sec_rgy_acct_admin_flags_none 0x00 |
84 | | #define sec_rgy_acct_auth_post_dated 0x01 |
85 | | #define sec_rgy_acct_auth_forwardable 0x02 |
86 | | #define sec_rgy_acct_auth_tgt 0x04 |
87 | | #define sec_rgy_acct_auth_renewable 0x08 |
88 | | #define sec_rgy_acct_auth_proxiable 0x10 |
89 | | #define sec_rgy_acct_auth_dup_skey 0x20 |
90 | | #define sec_rgy_acct_auth_user_to_user 0x40 |
91 | | #define sec_rgy_acct_auth_flags_none 0x00 |
92 | | #define sec_rgy_acct_user_passwd_valid 0x01 |
93 | | #define sec_rgy_acct_user_flags_none 0x00 |
94 | | #define rs_acct_part_user 0x01 |
95 | | #define rs_acct_part_admin 0x02 |
96 | | #define rs_acct_part_passwd 0x04 |
97 | | #define rs_acct_part_unused 0x08 |
98 | | #define rs_acct_part_login_name 0x10 |
99 | | #define sec_rgy_pgo_is_an_alias 0x01 |
100 | | #define sec_rgy_pgo_is_required 0x02 |
101 | | #define sec_rgy_pgo_projlist_ok 0x04 |
102 | | #define sec_rgy_pgo_flags_none 0x00 |
103 | | #define sec_rgy_acct_user_passwd_valid 0x01 |
104 | | #define sec_rgy_acct_user_flags_none 0x00 |
105 | | |
106 | | static int ett_rs_pgo; |
107 | | |
108 | | static e_guid_t uuid_rs_pgo = |
109 | | { 0x4c878280, 0x3000, 0x0000, {0x0d, 0x00, 0x02, 0x87, 0x14, 0x00, 0x00, |
110 | | 0x00} |
111 | | }; |
112 | | static uint16_t ver_rs_pgo = 1; |
113 | | |
114 | | |
115 | | static int |
116 | | dissect_error_status_t (tvbuff_t * tvb, int offset, |
117 | | packet_info * pinfo, proto_tree * parent_tree, |
118 | | dcerpc_info *di, uint8_t * drep) |
119 | 0 | { |
120 | 0 | proto_item *item; |
121 | 0 | proto_tree *tree; |
122 | 0 | int old_offset = offset; |
123 | 0 | uint32_t st; |
124 | 0 | const char *st_str; |
125 | |
|
126 | 0 | if (di->conformant_run) |
127 | 0 | { |
128 | 0 | return offset; |
129 | 0 | } |
130 | | |
131 | 0 | tree = proto_tree_add_subtree(parent_tree, tvb, offset, -1, ett_error_status_t, &item, "error_status_t"); |
132 | |
|
133 | 0 | offset = |
134 | 0 | dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, hf_error_status_t, |
135 | 0 | &st); |
136 | 0 | st_str = val_to_str_ext (st, &dce_error_vals_ext, "%u"); |
137 | |
|
138 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " st:%s ", st_str); |
139 | |
|
140 | 0 | proto_item_set_len (item, offset - old_offset); |
141 | 0 | return offset; |
142 | 0 | } |
143 | | |
144 | | |
145 | | static int |
146 | | dissect_sec_rgy_pname_t (tvbuff_t * tvb, int offset, |
147 | | packet_info * pinfo, proto_tree * parent_tree, |
148 | | dcerpc_info *di, uint8_t * drep) |
149 | 0 | { |
150 | | |
151 | |
|
152 | 0 | proto_item *item; |
153 | 0 | proto_tree *tree; |
154 | 0 | int old_offset = offset; |
155 | 0 | const uint8_t *principal; |
156 | 0 | #define sec_rgy_pname_t_size 257 |
157 | | /* |
158 | | dissect sec_rgy_pname const signed32 sec_rgy_pname_t_size = 257; * Include final '\0' * |
159 | | typedef [string] char sec_rgy_pname_t[sec_rgy_pname_t_size]; |
160 | | */ |
161 | 0 | uint32_t string_size; |
162 | |
|
163 | 0 | if (di->conformant_run) |
164 | 0 | { |
165 | 0 | return offset; |
166 | 0 | } |
167 | | |
168 | | |
169 | 0 | tree = proto_tree_add_subtree(parent_tree, tvb, offset, -1, ett_sec_rgy_pname_t, &item, "sec_rgy_pname_t"); |
170 | |
|
171 | 0 | offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, di, drep, |
172 | 0 | hf_sec_rgy_pname_t_size, &string_size); |
173 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " String_size:%u", string_size); |
174 | 0 | if (string_size < sec_rgy_pname_t_size) |
175 | 0 | { |
176 | | /* proto_tree_add_string(tree, id, tvb, start, length, value_ptr); */ |
177 | |
|
178 | 0 | proto_tree_add_item_ret_string(tree, hf_sec_rgy_pname_t_principalName_string, |
179 | 0 | tvb, offset, string_size, ENC_ASCII|ENC_NA, pinfo->pool, &principal); |
180 | 0 | if (string_size > 1) |
181 | 0 | { |
182 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " Principal:%s", principal); |
183 | 0 | } |
184 | 0 | offset += string_size; |
185 | 0 | } |
186 | 0 | else |
187 | 0 | { |
188 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, |
189 | 0 | " :FIXME!: Invalid string length of %u", |
190 | 0 | string_size); |
191 | 0 | } |
192 | |
|
193 | 0 | proto_item_set_len (item, offset - old_offset); |
194 | 0 | return offset; |
195 | 0 | } |
196 | | |
197 | | static int |
198 | | dissect_sec_rgy_pgo_flags_t (tvbuff_t * tvb, int offset, |
199 | | packet_info * pinfo, proto_tree * parent_tree, |
200 | | dcerpc_info *di, uint8_t * drep) |
201 | 0 | { |
202 | | |
203 | | /* |
204 | | |
205 | | */ |
206 | |
|
207 | 0 | proto_item *item = NULL; |
208 | 0 | proto_tree *tree = NULL; |
209 | 0 | int old_offset = offset; |
210 | 0 | uint32_t flags; |
211 | | |
212 | | /* |
213 | | typedef bitset sec_rgy_pgo_flags_t; |
214 | | */ |
215 | |
|
216 | 0 | if (di->conformant_run) |
217 | 0 | { |
218 | 0 | return offset; |
219 | 0 | } |
220 | | |
221 | | |
222 | 0 | if (parent_tree) |
223 | 0 | { |
224 | 0 | tree = |
225 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
226 | 0 | ett_sec_rgy_pgo_flags_t, &item, "sec_rgy_pgo_flags_t "); |
227 | 0 | } |
228 | |
|
229 | 0 | offset = |
230 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
231 | 0 | hf_sec_rgy_pgo_flags_t, &flags); |
232 | | |
233 | | /* |
234 | | * |
235 | | * s e c _ r g y _ p g o _ f l a g s _ t |
236 | | * |
237 | | |
238 | | * pgo item is an alias * |
239 | | const unsigned32 sec_rgy_pgo_is_an_alias = 0x1; |
240 | | |
241 | | * pgo item is required - cannot be deleted * |
242 | | const unsigned32 sec_rgy_pgo_is_required = 0x2; |
243 | | |
244 | | * |
245 | | * projlist_ok: on person items indicates person can have a concurrent |
246 | | * group set on group items indicates this group can appear on a |
247 | | * concurrent group set. On org items this flag is undefined. |
248 | | * |
249 | | const unsigned32 sec_rgy_pgo_projlist_ok = 0x4; |
250 | | |
251 | | * |
252 | | * bits 4-32 unused |
253 | | * |
254 | | const unsigned32 sec_rgy_pgo_flags_none = 0; |
255 | | */ |
256 | 0 | #define sec_rgy_pgo_is_an_alias 0x01 |
257 | 0 | #define sec_rgy_pgo_is_required 0x02 |
258 | 0 | #define sec_rgy_pgo_projlist_ok 0x04 |
259 | 0 | #define sec_rgy_pgo_flags_none 0x00 |
260 | | |
261 | |
|
262 | 0 | col_append_str (pinfo->cinfo, COL_INFO, " PgoFlags="); |
263 | 0 | if ((flags & sec_rgy_pgo_is_an_alias) == sec_rgy_pgo_is_an_alias) |
264 | 0 | { |
265 | 0 | col_append_str (pinfo->cinfo, COL_INFO, ":IS_AN_ALIAS"); |
266 | 0 | } |
267 | 0 | if ((flags & sec_rgy_pgo_is_required) == sec_rgy_pgo_is_required) |
268 | 0 | { |
269 | 0 | col_append_str (pinfo->cinfo, COL_INFO, ":IS_REQUIRED"); |
270 | 0 | } |
271 | 0 | if ((flags & sec_rgy_pgo_projlist_ok) == sec_rgy_pgo_projlist_ok) |
272 | 0 | { |
273 | 0 | col_append_str (pinfo->cinfo, COL_INFO, ":PROJLIST_OK"); |
274 | 0 | } |
275 | 0 | if ((flags & sec_rgy_acct_admin_client) == sec_rgy_acct_admin_client) |
276 | 0 | { |
277 | 0 | col_append_str (pinfo->cinfo, COL_INFO, ":NONE"); |
278 | 0 | } |
279 | 0 | if ((flags & sec_rgy_pgo_flags_none) == sec_rgy_pgo_flags_none) |
280 | 0 | { |
281 | 0 | col_append_str (pinfo->cinfo, COL_INFO, ":NONE"); |
282 | 0 | } |
283 | |
|
284 | 0 | proto_item_set_len (item, offset - old_offset); |
285 | 0 | return offset; |
286 | 0 | } |
287 | | |
288 | | |
289 | | |
290 | | |
291 | | static int |
292 | | dissect_rs_cache_data_t (tvbuff_t * tvb, int offset, |
293 | | packet_info * pinfo, proto_tree * parent_tree, |
294 | | dcerpc_info *di, uint8_t * drep) |
295 | 0 | { |
296 | | |
297 | | /* |
298 | | typedef struct { |
299 | | uuid_t site_id; |
300 | | sec_timeval_sec_t person_dtm; |
301 | | sec_timeval_sec_t group_dtm; |
302 | | sec_timeval_sec_t org_dtm; |
303 | | } rs_cache_data_t; |
304 | | */ |
305 | | |
306 | |
|
307 | 0 | proto_item *item = NULL; |
308 | 0 | proto_tree *tree = NULL; |
309 | 0 | int old_offset = offset; |
310 | 0 | uint32_t person_dtm, group_dtm, org_dtm; |
311 | 0 | e_guid_t uuid1; |
312 | | |
313 | |
|
314 | 0 | if (di->conformant_run) |
315 | 0 | { |
316 | 0 | return offset; |
317 | 0 | } |
318 | | |
319 | | |
320 | 0 | if (parent_tree) |
321 | 0 | { |
322 | 0 | tree = |
323 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, ett_rs_cache_data_t, &item, "rs_cache_data_t"); |
324 | 0 | } |
325 | | |
326 | |
|
327 | 0 | offset = |
328 | 0 | dissect_ndr_uuid_t(tvb, offset, pinfo, tree, di, drep, hf_rs_uuid1, &uuid1); |
329 | 0 | offset = |
330 | 0 | dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep, hf_rs_timeval, |
331 | 0 | &person_dtm); |
332 | 0 | offset = |
333 | 0 | dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep, hf_rs_timeval, |
334 | 0 | &group_dtm); |
335 | 0 | offset = |
336 | 0 | dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep, hf_rs_timeval, |
337 | 0 | &org_dtm); |
338 | |
|
339 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, |
340 | 0 | " siteid %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x person_dtm:%u group_dtm:%u org_dtm:%u", |
341 | 0 | uuid1.data1, uuid1.data2, uuid1.data3, uuid1.data4[0], |
342 | 0 | uuid1.data4[1], uuid1.data4[2], uuid1.data4[3], |
343 | 0 | uuid1.data4[4], uuid1.data4[5], uuid1.data4[6], |
344 | 0 | uuid1.data4[7], person_dtm, group_dtm, org_dtm); |
345 | |
|
346 | 0 | proto_item_set_len (item, offset - old_offset); |
347 | 0 | return offset; |
348 | 0 | } |
349 | | |
350 | | |
351 | | |
352 | | static int |
353 | | dissect_sec_rgy_name_t (tvbuff_t * tvb, int offset, |
354 | | packet_info * pinfo, proto_tree * parent_tree, |
355 | | dcerpc_info *di, uint8_t * drep) |
356 | 0 | { |
357 | | |
358 | |
|
359 | 0 | proto_item *item; |
360 | 0 | proto_tree *tree; |
361 | 0 | int old_offset = offset; |
362 | 0 | const uint8_t *principal; |
363 | 0 | #define sec_rgy_name_t_size 1025 |
364 | | /* typedef [string] char sec_rgy_name_t[sec_rgy_name_t_size]; */ |
365 | 0 | uint32_t string_size; |
366 | |
|
367 | 0 | if (di->conformant_run) |
368 | 0 | { |
369 | 0 | return offset; |
370 | 0 | } |
371 | | |
372 | | |
373 | 0 | tree = proto_tree_add_subtree(parent_tree, tvb, offset, -1, ett_sec_rgy_name_t, &item, "sec_rgy_name_t"); |
374 | |
|
375 | 0 | offset = |
376 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
377 | 0 | hf_sec_rgy_name_t_size, &string_size); |
378 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " String_size:%u", string_size); |
379 | 0 | if (string_size < sec_rgy_name_t_size) |
380 | 0 | { |
381 | | /* proto_tree_add_string(tree, id, tvb, start, length, value_ptr); */ |
382 | |
|
383 | 0 | proto_tree_add_item_ret_string(tree, hf_sec_rgy_name_t_principalName_string, |
384 | 0 | tvb, offset, string_size, ENC_ASCII|ENC_NA, pinfo->pool, &principal); |
385 | 0 | if (string_size > 1) |
386 | 0 | { |
387 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " Principal:%s", principal); |
388 | 0 | } |
389 | 0 | offset += string_size; |
390 | 0 | } |
391 | 0 | else |
392 | 0 | { |
393 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, |
394 | 0 | " :FIXME!: Invalid string length of %u", |
395 | 0 | string_size); |
396 | 0 | } |
397 | |
|
398 | 0 | proto_item_set_len (item, offset - old_offset); |
399 | 0 | return offset; |
400 | 0 | } |
401 | | |
402 | | |
403 | | static int |
404 | | dissect_sec_rgy_domain_t (tvbuff_t * tvb, int offset, |
405 | | packet_info * pinfo, proto_tree * parent_tree, |
406 | | dcerpc_info *di, uint8_t * drep) |
407 | 0 | { |
408 | | |
409 | | /* |
410 | | typedef signed32 sec_rgy_domain_t; |
411 | | */ |
412 | |
|
413 | 0 | proto_item *item = NULL; |
414 | 0 | proto_tree *tree = NULL; |
415 | 0 | int old_offset = offset; |
416 | 0 | uint32_t domain_t; |
417 | |
|
418 | 0 | if (di->conformant_run) |
419 | 0 | { |
420 | 0 | return offset; |
421 | 0 | } |
422 | | |
423 | | |
424 | 0 | if (parent_tree) |
425 | 0 | { |
426 | 0 | tree = |
427 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, ett_sec_rgy_domain_t, &item, "sec_rgy_domain_t"); |
428 | 0 | } |
429 | | |
430 | |
|
431 | 0 | offset = |
432 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_sec_rgy_domain_t, |
433 | 0 | &domain_t); |
434 | |
|
435 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " sec_rgy_domain_t:%u", |
436 | 0 | domain_t); |
437 | | |
438 | |
|
439 | 0 | proto_item_set_len (item, offset - old_offset); |
440 | 0 | return offset; |
441 | 0 | } |
442 | | |
443 | | static int |
444 | | dissect_sec_rgy_pgo_item_t (tvbuff_t * tvb, int offset, |
445 | | packet_info * pinfo, proto_tree * parent_tree, |
446 | | dcerpc_info *di, uint8_t * drep) |
447 | 0 | { |
448 | | |
449 | | /* |
450 | | typedef struct { |
451 | | uuid_t id; |
452 | | signed32 unix_num; |
453 | | signed32 quota; |
454 | | sec_rgy_pgo_flags_t flags; |
455 | | sec_rgy_pname_t fullname; |
456 | | } sec_rgy_pgo_item_t; |
457 | | |
458 | | */ |
459 | |
|
460 | 0 | proto_item *item = NULL; |
461 | 0 | proto_tree *tree = NULL; |
462 | 0 | int old_offset = offset; |
463 | 0 | e_guid_t id; |
464 | 0 | uint32_t unix_num, quota; |
465 | |
|
466 | 0 | if (di->conformant_run) |
467 | 0 | { |
468 | 0 | return offset; |
469 | 0 | } |
470 | | |
471 | | |
472 | 0 | if (parent_tree) |
473 | 0 | { |
474 | 0 | tree = |
475 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
476 | 0 | ett_sec_rgy_pgo_item_t, &item, " sec_rgy_pgo_item_t "); |
477 | 0 | } |
478 | |
|
479 | 0 | offset = |
480 | 0 | dissect_ndr_uuid_t(tvb, offset, pinfo, tree, di, drep, hf_rs_uuid1, &id); |
481 | 0 | offset = |
482 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
483 | 0 | hf_rs_sec_rgy_pgo_item_t_unix_num, &unix_num); |
484 | 0 | offset = |
485 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
486 | 0 | hf_rs_sec_rgy_pgo_item_t_quota, "a); |
487 | 0 | offset = dissect_sec_rgy_pgo_flags_t (tvb, offset, pinfo, tree, di, drep); |
488 | 0 | offset += 4; /* XXX */ |
489 | 0 | offset = dissect_sec_rgy_pname_t (tvb, offset, pinfo, tree, di, drep); |
490 | |
|
491 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, |
492 | 0 | " sec_rgy_pgo_item_t - id %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x unix_num:%u quota:%u", |
493 | 0 | id.data1, id.data2, id.data3, id.data4[0], |
494 | 0 | id.data4[1], id.data4[2], id.data4[3], |
495 | 0 | id.data4[4], id.data4[5], id.data4[6], |
496 | 0 | id.data4[7], unix_num, quota); |
497 | |
|
498 | 0 | proto_item_set_len (item, offset - old_offset); |
499 | 0 | return offset; |
500 | 0 | } |
501 | | |
502 | | |
503 | | static int |
504 | | dissect_sec_rgy_cursor_t (tvbuff_t * tvb, int offset, |
505 | | packet_info * pinfo, proto_tree * parent_tree, |
506 | | dcerpc_info *di, uint8_t * drep) |
507 | 0 | { |
508 | | |
509 | | /* |
510 | | * Database cursor for iterative operations |
511 | | * |
512 | | typedef struct { |
513 | | uuid_t source; |
514 | | signed32 handle; |
515 | | boolean32 valid; |
516 | | } sec_rgy_cursor_t; |
517 | | |
518 | | |
519 | | */ |
520 | |
|
521 | 0 | proto_item *item = NULL; |
522 | 0 | proto_tree *tree = NULL; |
523 | 0 | int old_offset = offset; |
524 | 0 | e_guid_t source; |
525 | 0 | uint32_t handle, valid; |
526 | |
|
527 | 0 | if (di->conformant_run) |
528 | 0 | { |
529 | 0 | return offset; |
530 | 0 | } |
531 | | |
532 | | |
533 | 0 | if (parent_tree) |
534 | 0 | { |
535 | 0 | tree = |
536 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
537 | 0 | ett_sec_rgy_cursor_t, &item, " sec_rgy_cursor_t "); |
538 | 0 | } |
539 | |
|
540 | 0 | offset = |
541 | 0 | dissect_ndr_uuid_t(tvb, offset, pinfo, tree, di, drep, hf_rs_uuid1, &source); |
542 | 0 | offset = |
543 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
544 | 0 | hf_rs_sec_rgy_pgo_item_t_unix_num, &handle); |
545 | 0 | offset = |
546 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
547 | 0 | hf_rs_sec_rgy_pgo_item_t_quota, &valid); |
548 | |
|
549 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, |
550 | 0 | " sec_rgy_cursor_t - source %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x handle:%u valid:%u", |
551 | 0 | source.data1, source.data2, source.data3, |
552 | 0 | source.data4[0], source.data4[1], source.data4[2], |
553 | 0 | source.data4[3], source.data4[4], source.data4[5], |
554 | 0 | source.data4[6], source.data4[7], handle, valid); |
555 | |
|
556 | 0 | proto_item_set_len (item, offset - old_offset); |
557 | 0 | return offset; |
558 | 0 | } |
559 | | |
560 | | static int |
561 | | dissect_rs_pgo_query_t (tvbuff_t * tvb, int offset, |
562 | | packet_info * pinfo, proto_tree * parent_tree, |
563 | | dcerpc_info *di, uint8_t * drep) |
564 | 0 | { |
565 | |
|
566 | 0 | enum |
567 | 0 | { |
568 | 0 | rs_pgo_query_name, |
569 | 0 | rs_pgo_query_id, |
570 | 0 | rs_pgo_query_unix_num, |
571 | 0 | rs_pgo_query_next, |
572 | 0 | rs_pgo_query_none |
573 | 0 | }; |
574 | | |
575 | |
|
576 | 0 | proto_item *item = NULL; |
577 | 0 | proto_tree *tree = NULL; |
578 | 0 | int old_offset = offset; |
579 | 0 | uint8_t query_t; |
580 | |
|
581 | 0 | if (di->conformant_run) |
582 | 0 | { |
583 | 0 | return offset; |
584 | 0 | } |
585 | | |
586 | | |
587 | 0 | if (parent_tree) |
588 | 0 | { |
589 | 0 | tree = |
590 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, ett_rs_pgo_query_t, &item, "rs_pgo_query_t "); |
591 | 0 | } |
592 | 0 | offset = |
593 | 0 | dissect_ndr_uint8 (tvb, offset, pinfo, tree, di, drep, hf_rs_pgo_query_t, |
594 | 0 | &query_t); |
595 | 0 | col_append_str (pinfo->cinfo, COL_INFO, " rs_pgo_query_t:"); |
596 | |
|
597 | 0 | switch (query_t) |
598 | 0 | { |
599 | 0 | case rs_pgo_query_name: |
600 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "NAME"); |
601 | 0 | break; |
602 | 0 | case rs_pgo_query_id: |
603 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "ID"); |
604 | 0 | break; |
605 | 0 | case rs_pgo_query_unix_num: |
606 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "UNIX_NUM"); |
607 | 0 | break; |
608 | 0 | case rs_pgo_query_next: |
609 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "NEXT"); |
610 | 0 | break; |
611 | 0 | case rs_pgo_query_none: |
612 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "NONE"); |
613 | 0 | break; |
614 | 0 | default: |
615 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " unknown:%u", query_t); |
616 | 0 | break; |
617 | 0 | ; |
618 | 0 | } |
619 | | |
620 | | |
621 | 0 | proto_item_set_len (item, offset - old_offset); |
622 | 0 | return offset; |
623 | 0 | } |
624 | | static int |
625 | | dissect_rs_pgo_id_key_t (tvbuff_t * tvb, int offset, |
626 | | packet_info * pinfo, proto_tree * parent_tree, |
627 | | dcerpc_info *di, uint8_t * drep) |
628 | 0 | { |
629 | | |
630 | | /* |
631 | | typedef struct { |
632 | | uuid_t id; |
633 | | sec_rgy_name_t scope; |
634 | | } rs_pgo_id_key_t; |
635 | | |
636 | | */ |
637 | |
|
638 | 0 | proto_item *item = NULL; |
639 | 0 | proto_tree *tree = NULL; |
640 | 0 | int old_offset = offset; |
641 | 0 | e_guid_t id; |
642 | |
|
643 | 0 | if (di->conformant_run) |
644 | 0 | { |
645 | 0 | return offset; |
646 | 0 | } |
647 | | |
648 | | |
649 | 0 | if (parent_tree) |
650 | 0 | { |
651 | 0 | tree = |
652 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
653 | 0 | ett_rs_pgo_id_key_t, &item, "rs_pgo_id_key_t "); |
654 | 0 | } |
655 | |
|
656 | 0 | offset = |
657 | 0 | dissect_ndr_uuid_t(tvb, offset, pinfo, tree, di, drep, hf_rs_uuid1, &id); |
658 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
659 | |
|
660 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, |
661 | 0 | " rs_pgo_id_key_t - id %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", |
662 | 0 | id.data1, id.data2, id.data3, id.data4[0], |
663 | 0 | id.data4[1], id.data4[2], id.data4[3], |
664 | 0 | id.data4[4], id.data4[5], id.data4[6], id.data4[7]); |
665 | |
|
666 | 0 | proto_item_set_len (item, offset - old_offset); |
667 | 0 | return offset; |
668 | 0 | } |
669 | | |
670 | | |
671 | | static int |
672 | | dissect_rs_pgo_result_t (tvbuff_t * tvb, int offset, |
673 | | packet_info * pinfo, proto_tree * parent_tree, |
674 | | dcerpc_info *di, uint8_t * drep) |
675 | 0 | { |
676 | | |
677 | | /* |
678 | | typedef struct { |
679 | | sec_rgy_name_t name; |
680 | | sec_rgy_pgo_item_t item; |
681 | | } rs_pgo_result_t; |
682 | | |
683 | | |
684 | | */ |
685 | |
|
686 | 0 | proto_item *item = NULL; |
687 | 0 | proto_tree *tree = NULL; |
688 | 0 | int old_offset = offset; |
689 | |
|
690 | 0 | if (di->conformant_run) |
691 | 0 | { |
692 | 0 | return offset; |
693 | 0 | } |
694 | | |
695 | 0 | if (parent_tree) |
696 | 0 | { |
697 | 0 | tree = |
698 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
699 | 0 | ett_rs_pgo_result_t, &item, "rs_pgo_result_t "); |
700 | 0 | } |
701 | |
|
702 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
703 | 0 | offset = dissect_sec_rgy_pgo_item_t (tvb, offset, pinfo, tree, di, drep); |
704 | |
|
705 | 0 | proto_item_set_len (item, offset - old_offset); |
706 | 0 | return offset; |
707 | 0 | } |
708 | | |
709 | | |
710 | | |
711 | | static int |
712 | | dissect_rs_pgo_unix_num_key_t (tvbuff_t * tvb, int offset, |
713 | | packet_info * pinfo, proto_tree * parent_tree, |
714 | | dcerpc_info *di, uint8_t * drep) |
715 | 0 | { |
716 | | |
717 | | /* |
718 | | typedef struct { |
719 | | signed32 unix_num; |
720 | | sec_rgy_name_t scope; |
721 | | } rs_pgo_unix_num_key_t; |
722 | | |
723 | | |
724 | | r |
725 | | |
726 | | */ |
727 | |
|
728 | 0 | proto_item *item = NULL; |
729 | 0 | proto_tree *tree = NULL; |
730 | 0 | int old_offset = offset; |
731 | 0 | uint32_t rs_pgo_unix_num_key_t; |
732 | |
|
733 | 0 | if (di->conformant_run) |
734 | 0 | { |
735 | 0 | return offset; |
736 | 0 | } |
737 | | |
738 | | |
739 | 0 | if (parent_tree) |
740 | 0 | { |
741 | 0 | tree = |
742 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
743 | 0 | ett_rs_pgo_unix_num_key_t, &item, " rs_pgo_unix_num_key_t "); |
744 | 0 | } |
745 | |
|
746 | 0 | offset = |
747 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
748 | 0 | hf_rs_pgo_unix_num_key_t, &rs_pgo_unix_num_key_t); |
749 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
750 | |
|
751 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, |
752 | 0 | " rs_pgo_unix_num_key_t:%u", rs_pgo_unix_num_key_t); |
753 | |
|
754 | 0 | proto_item_set_len (item, offset - old_offset); |
755 | 0 | return offset; |
756 | 0 | } |
757 | | |
758 | | |
759 | | static int |
760 | | dissect_rs_pgo_query_key_t (tvbuff_t * tvb, int offset, |
761 | | packet_info * pinfo, proto_tree * parent_tree, |
762 | | dcerpc_info *di, uint8_t * drep) |
763 | 0 | { |
764 | |
|
765 | 0 | enum |
766 | 0 | { |
767 | 0 | rs_pgo_query_name, |
768 | 0 | rs_pgo_query_id, |
769 | 0 | rs_pgo_query_unix_num, |
770 | 0 | rs_pgo_query_next, |
771 | 0 | rs_pgo_query_none |
772 | 0 | }; |
773 | | /* |
774 | | typedef union switch (rs_pgo_query_t query) tagged_union { |
775 | | case rs_pgo_query_name: |
776 | | sec_rgy_name_t name; |
777 | | |
778 | | case rs_pgo_query_id: |
779 | | rs_pgo_id_key_t id_key; |
780 | | |
781 | | case rs_pgo_query_unix_num: |
782 | | rs_pgo_unix_num_key_t unix_num_key; |
783 | | |
784 | | case rs_pgo_query_next: |
785 | | sec_rgy_name_t scope; |
786 | | |
787 | | default: |
788 | | ; * empty branch of union * |
789 | | |
790 | | } rs_pgo_query_key_t; |
791 | | */ |
792 | | |
793 | |
|
794 | 0 | proto_item *item = NULL; |
795 | 0 | proto_tree *tree = NULL; |
796 | 0 | int old_offset = offset; |
797 | 0 | uint16_t query_t; |
798 | |
|
799 | 0 | if (di->conformant_run) |
800 | 0 | { |
801 | 0 | return offset; |
802 | 0 | } |
803 | | |
804 | | |
805 | 0 | if (parent_tree) |
806 | 0 | { |
807 | 0 | tree = |
808 | 0 | proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
809 | 0 | ett_rs_pgo_query_key_t, &item, "rs_pgo_query_key_t "); |
810 | 0 | } |
811 | 0 | offset = |
812 | 0 | dissect_ndr_uint16 (tvb, offset, pinfo, tree, di, drep, hf_rs_pgo_query_key_t, |
813 | 0 | &query_t); |
814 | 0 | col_append_str (pinfo->cinfo, COL_INFO, " rs_pgo_query_key_t:"); |
815 | 0 | offset += 4; |
816 | 0 | switch (query_t) |
817 | 0 | { |
818 | 0 | case rs_pgo_query_name: |
819 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "NAME"); |
820 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
821 | 0 | break; |
822 | 0 | case rs_pgo_query_id: |
823 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "ID"); |
824 | 0 | offset = dissect_rs_pgo_id_key_t (tvb, offset, pinfo, tree, di, drep); |
825 | 0 | break; |
826 | 0 | case rs_pgo_query_unix_num: |
827 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "UNIX_NUM"); |
828 | 0 | offset = dissect_rs_pgo_unix_num_key_t (tvb, offset, pinfo, tree, di, drep); |
829 | 0 | break; |
830 | 0 | case rs_pgo_query_next: |
831 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "NEXT"); |
832 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
833 | 0 | break; |
834 | 0 | case rs_pgo_query_none: |
835 | 0 | col_append_str (pinfo->cinfo, COL_INFO, "NONE"); |
836 | 0 | break; |
837 | | |
838 | 0 | default: |
839 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " unknown:%u", query_t); |
840 | 0 | break; |
841 | 0 | } |
842 | | |
843 | 0 | proto_item_set_len (item, offset - old_offset); |
844 | 0 | return offset; |
845 | 0 | } |
846 | | |
847 | | |
848 | | static int |
849 | | dissect_rs_pgo_query_result_t (tvbuff_t * tvb, int offset, |
850 | | packet_info * pinfo, proto_tree * parent_tree, |
851 | | dcerpc_info *di, uint8_t * drep) |
852 | 0 | { |
853 | 0 | proto_item *item = NULL; |
854 | 0 | proto_tree *tree = NULL; |
855 | 0 | int old_offset = offset; |
856 | 0 | uint32_t st; |
857 | 0 | const char *status; |
858 | 0 | #define error_status_ok 0 |
859 | | |
860 | | /* |
861 | | typedef union switch (signed32 status) tagged_union { |
862 | | case error_status_ok: |
863 | | rs_pgo_result_t result; |
864 | | |
865 | | default: |
866 | | ; * empty branch of union * |
867 | | |
868 | | } rs_pgo_query_result_t; |
869 | | */ |
870 | |
|
871 | 0 | if (di->conformant_run) |
872 | 0 | { |
873 | 0 | return offset; |
874 | 0 | } |
875 | | |
876 | 0 | if (parent_tree) |
877 | 0 | { |
878 | 0 | tree = proto_tree_add_subtree(parent_tree, tvb, offset, -1, |
879 | 0 | ett_rs_pgo_query_result_t, &item, "rs_pgo_query_result_t"); |
880 | 0 | } |
881 | |
|
882 | 0 | offset = |
883 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, |
884 | 0 | hf_rs_pgo_query_result_t, &st); |
885 | 0 | status = val_to_str_ext (st, &dce_error_vals_ext, "%u"); |
886 | |
|
887 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " status:%s ", status); |
888 | |
|
889 | 0 | offset += 4; /* XXX */ |
890 | |
|
891 | 0 | switch (st) |
892 | 0 | { |
893 | 0 | case error_status_ok: |
894 | 0 | offset = dissect_rs_pgo_result_t (tvb, offset, pinfo, tree, di, drep); |
895 | 0 | break; |
896 | 0 | default: |
897 | 0 | ; |
898 | |
|
899 | 0 | } |
900 | | |
901 | 0 | proto_item_set_len (item, offset - old_offset); |
902 | 0 | return offset; |
903 | 0 | } |
904 | | |
905 | | |
906 | | |
907 | | static int |
908 | | rs_pgo_dissect_add_rqst (tvbuff_t * tvb, int offset, |
909 | | packet_info * pinfo, proto_tree * tree, |
910 | | dcerpc_info *di, uint8_t * drep) |
911 | 0 | { |
912 | 0 | if (di->conformant_run) |
913 | 0 | { |
914 | 0 | return offset; |
915 | 0 | } |
916 | | |
917 | | /* |
918 | | [in] sec_rgy_domain_t name_domain, |
919 | | [in] sec_rgy_name_t pgo_name, |
920 | | [in] sec_rgy_pgo_item_t *pgo_item, |
921 | | */ |
922 | | |
923 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
924 | 0 | offset += 4; |
925 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
926 | 0 | offset = |
927 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
928 | 0 | dissect_sec_rgy_pgo_item_t, NDR_POINTER_REF, |
929 | 0 | "sec_rgy_pgo_item_t: ", -1); |
930 | |
|
931 | 0 | return offset; |
932 | 0 | } |
933 | | static int |
934 | | rs_pgo_dissect_add_resp (tvbuff_t * tvb, int offset, |
935 | | packet_info * pinfo, proto_tree * tree, |
936 | | dcerpc_info *di, uint8_t * drep) |
937 | 0 | { |
938 | 0 | int buff_remain; |
939 | |
|
940 | 0 | if (di->conformant_run) |
941 | 0 | { |
942 | 0 | return offset; |
943 | 0 | } |
944 | | |
945 | | /* |
946 | | [out] rs_cache_data_t *cache_info, |
947 | | [out] error_status_t *status |
948 | | */ |
949 | | |
950 | 0 | buff_remain = tvb_captured_length_remaining(tvb, offset); |
951 | | |
952 | | /* found several add_member responses that had 8 bytes of data. first was 4 0's and last was 3 zeros and a 1 */ |
953 | 0 | if (buff_remain > 8) { |
954 | 0 | offset = |
955 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
956 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
957 | 0 | "cache_info: ", -1); |
958 | 0 | } |
959 | 0 | offset = |
960 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
961 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status: ", |
962 | 0 | -1); |
963 | 0 | return offset; |
964 | 0 | } |
965 | | |
966 | | static int |
967 | | rs_pgo_dissect_delete_rqst (tvbuff_t * tvb, int offset, |
968 | | packet_info * pinfo, proto_tree * tree, |
969 | | dcerpc_info *di, uint8_t * drep) |
970 | 0 | { |
971 | 0 | if (di->conformant_run) |
972 | 0 | { |
973 | 0 | return offset; |
974 | 0 | } |
975 | | |
976 | | /* |
977 | | [in] sec_rgy_domain_t name_domain, |
978 | | [in] sec_rgy_name_t pgo_name, |
979 | | */ |
980 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
981 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
982 | |
|
983 | 0 | return offset; |
984 | 0 | } |
985 | | |
986 | | static int |
987 | | rs_pgo_dissect_delete_resp (tvbuff_t * tvb, int offset, |
988 | | packet_info * pinfo, proto_tree * tree, |
989 | | dcerpc_info *di, uint8_t * drep) |
990 | 0 | { |
991 | 0 | int buff_remain; |
992 | |
|
993 | 0 | if (di->conformant_run) |
994 | 0 | { |
995 | 0 | return offset; |
996 | 0 | } |
997 | | |
998 | | /* |
999 | | [out] rs_cache_data_t *cache_info, |
1000 | | [out] error_status_t *status |
1001 | | */ |
1002 | 0 | buff_remain = tvb_captured_length_remaining(tvb, offset); |
1003 | | |
1004 | | /* found several add_member responses that had 8 bytes of data. first was 4 0's and last was 3 zeros and a 1 */ |
1005 | |
|
1006 | 0 | if (buff_remain > 8) { |
1007 | 0 | offset = |
1008 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1009 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1010 | 0 | "cache_info:", -1); |
1011 | 0 | } |
1012 | |
|
1013 | 0 | offset = |
1014 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1015 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status:", |
1016 | 0 | -1); |
1017 | |
|
1018 | 0 | return offset; |
1019 | 0 | } |
1020 | | |
1021 | | static int |
1022 | | rs_pgo_dissect_replace_rqst (tvbuff_t * tvb, int offset, |
1023 | | packet_info * pinfo, proto_tree * tree, |
1024 | | dcerpc_info *di, uint8_t * drep) |
1025 | 0 | { |
1026 | 0 | if (di->conformant_run) |
1027 | 0 | { |
1028 | 0 | return offset; |
1029 | 0 | } |
1030 | | |
1031 | | /* |
1032 | | [in] sec_rgy_domain_t name_domain, |
1033 | | [in] sec_rgy_name_t pgo_name, |
1034 | | [in] sec_rgy_pgo_item_t *pgo_item, |
1035 | | */ |
1036 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1037 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1038 | 0 | offset = |
1039 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1040 | 0 | dissect_sec_rgy_pgo_item_t, NDR_POINTER_REF, |
1041 | 0 | "pgo_item:", -1); |
1042 | |
|
1043 | 0 | return offset; |
1044 | 0 | } |
1045 | | |
1046 | | static int |
1047 | | rs_pgo_dissect_replace_resp (tvbuff_t * tvb, int offset, |
1048 | | packet_info * pinfo, proto_tree * tree, |
1049 | | dcerpc_info *di, uint8_t * drep) |
1050 | 0 | { |
1051 | 0 | if (di->conformant_run) |
1052 | 0 | { |
1053 | 0 | return offset; |
1054 | 0 | } |
1055 | | |
1056 | | /* |
1057 | | [out] rs_cache_data_t *cache_info, |
1058 | | [out] error_status_t *status |
1059 | | |
1060 | | */ |
1061 | | |
1062 | 0 | offset = |
1063 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1064 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1065 | 0 | "cache_info:", -1); |
1066 | 0 | offset = |
1067 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1068 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status:", |
1069 | 0 | -1); |
1070 | |
|
1071 | 0 | return offset; |
1072 | 0 | } |
1073 | | |
1074 | | |
1075 | | static int |
1076 | | rs_pgo_dissect_add_member_rqst (tvbuff_t * tvb, int offset, |
1077 | | packet_info * pinfo, proto_tree * tree, |
1078 | | dcerpc_info *di, uint8_t * drep) |
1079 | 0 | { |
1080 | 0 | if (di->conformant_run) |
1081 | 0 | { |
1082 | 0 | return offset; |
1083 | 0 | } |
1084 | | |
1085 | | |
1086 | | |
1087 | | /* |
1088 | | [in] sec_rgy_domain_t name_domain, |
1089 | | [in] sec_rgy_name_t go_name, |
1090 | | [in] sec_rgy_name_t person_name, |
1091 | | */ |
1092 | | |
1093 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1094 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1095 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1096 | | |
1097 | |
|
1098 | 0 | return offset; |
1099 | |
|
1100 | 0 | } |
1101 | | static int |
1102 | | rs_pgo_dissect_rename_rqst (tvbuff_t * tvb, int offset, |
1103 | | packet_info * pinfo, proto_tree * tree, |
1104 | | dcerpc_info *di, uint8_t * drep) |
1105 | 0 | { |
1106 | 0 | if (di->conformant_run) |
1107 | 0 | { |
1108 | 0 | return offset; |
1109 | 0 | } |
1110 | | |
1111 | | /* |
1112 | | [in] sec_rgy_domain_t name_domain, |
1113 | | [in] sec_rgy_name_t old_name, |
1114 | | [in] sec_rgy_name_t new_name, |
1115 | | */ |
1116 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1117 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1118 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1119 | | |
1120 | |
|
1121 | 0 | return offset; |
1122 | 0 | } |
1123 | | |
1124 | | static int |
1125 | | rs_pgo_dissect_rename_resp (tvbuff_t * tvb, int offset, |
1126 | | packet_info * pinfo, proto_tree * tree, |
1127 | | dcerpc_info *di, uint8_t * drep) |
1128 | 0 | { |
1129 | 0 | if (di->conformant_run) |
1130 | 0 | { |
1131 | 0 | return offset; |
1132 | 0 | } |
1133 | | |
1134 | | /* |
1135 | | [out] rs_cache_data_t *cache_info, |
1136 | | [out] error_status_t *status |
1137 | | */ |
1138 | 0 | offset = |
1139 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1140 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1141 | 0 | "cache_info:", -1); |
1142 | 0 | offset = |
1143 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1144 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status:", |
1145 | 0 | -1); |
1146 | |
|
1147 | 0 | return offset; |
1148 | 0 | } |
1149 | | |
1150 | | |
1151 | | static int |
1152 | | rs_pgo_dissect_add_member_resp (tvbuff_t * tvb, int offset, |
1153 | | packet_info * pinfo, proto_tree * tree, |
1154 | | dcerpc_info *di, uint8_t * drep) |
1155 | 0 | { |
1156 | 0 | int buff_remain; |
1157 | |
|
1158 | 0 | if (di->conformant_run) |
1159 | 0 | { |
1160 | 0 | return offset; |
1161 | 0 | } |
1162 | | |
1163 | | /* |
1164 | | [out] rs_cache_data_t *cache_info, |
1165 | | [out] error_status_t *status |
1166 | | */ |
1167 | | |
1168 | 0 | buff_remain = tvb_captured_length_remaining(tvb, offset); |
1169 | | |
1170 | | /* found several add responses that had 8 bytes of data. first was 4 0's and last was 3 zeros and a 1 */ |
1171 | 0 | if (buff_remain > 8) { |
1172 | |
|
1173 | 0 | offset = |
1174 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1175 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1176 | 0 | "cache_info:", -1); |
1177 | 0 | } |
1178 | 0 | offset = |
1179 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1180 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status:", |
1181 | 0 | -1); |
1182 | | |
1183 | |
|
1184 | 0 | return offset; |
1185 | 0 | } |
1186 | | |
1187 | | static int |
1188 | | rs_pgo_dissect_delete_member_rqst (tvbuff_t * tvb, int offset, |
1189 | | packet_info * pinfo, proto_tree * tree, |
1190 | | dcerpc_info *di, uint8_t * drep) |
1191 | 0 | { |
1192 | 0 | if (di->conformant_run) |
1193 | 0 | { |
1194 | 0 | return offset; |
1195 | 0 | } |
1196 | | |
1197 | | /* |
1198 | | void rs_pgo_delete_member ( |
1199 | | [in] sec_rgy_domain_t name_domain, |
1200 | | [in] sec_rgy_name_t go_name, |
1201 | | [in] sec_rgy_name_t person_name, |
1202 | | ); |
1203 | | */ |
1204 | | |
1205 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1206 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1207 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1208 | |
|
1209 | 0 | return offset; |
1210 | |
|
1211 | 0 | } |
1212 | | |
1213 | | |
1214 | | static int |
1215 | | rs_pgo_dissect_get_members_rqst (tvbuff_t * tvb, int offset, |
1216 | | packet_info * pinfo, proto_tree * tree, |
1217 | | dcerpc_info *di, uint8_t * drep) |
1218 | 0 | { |
1219 | |
|
1220 | 0 | uint32_t max_members; |
1221 | |
|
1222 | 0 | if (di->conformant_run) |
1223 | 0 | { |
1224 | 0 | return offset; |
1225 | 0 | } |
1226 | | |
1227 | | /* |
1228 | | [in] sec_rgy_domain_t name_domain, |
1229 | | [in] sec_rgy_name_t go_name, |
1230 | | [in, out] sec_rgy_cursor_t *member_cursor, |
1231 | | [in] signed32 max_members, |
1232 | | */ |
1233 | | |
1234 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1235 | 0 | offset += 4; |
1236 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1237 | 0 | offset = |
1238 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1239 | 0 | dissect_sec_rgy_cursor_t, NDR_POINTER_REF, |
1240 | 0 | "member_cursor:", -1); |
1241 | 0 | offset = |
1242 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_rs_var1, |
1243 | 0 | &max_members); |
1244 | |
|
1245 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " :max_members:%u", max_members); |
1246 | |
|
1247 | 0 | return offset; |
1248 | 0 | } |
1249 | | |
1250 | | static int |
1251 | | rs_pgo_dissect_key_transfer_rqst (tvbuff_t * tvb, int offset, |
1252 | | packet_info * pinfo, proto_tree * tree, |
1253 | | dcerpc_info *di, uint8_t * drep) |
1254 | 0 | { |
1255 | |
|
1256 | 0 | if (di->conformant_run) |
1257 | 0 | { |
1258 | 0 | return offset; |
1259 | 0 | } |
1260 | | |
1261 | | /* |
1262 | | [in] sec_rgy_domain_t name_domain, |
1263 | | [in] rs_pgo_query_t requested_result_type, |
1264 | | [in, out] rs_pgo_query_key_t *key, |
1265 | | */ |
1266 | | |
1267 | 0 | offset += 4; |
1268 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1269 | 0 | offset = dissect_rs_pgo_query_t (tvb, offset, pinfo, tree, di, drep); |
1270 | 0 | offset = |
1271 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1272 | 0 | dissect_rs_pgo_query_key_t, NDR_POINTER_REF, "key:", |
1273 | 0 | -1); |
1274 | |
|
1275 | 0 | return offset; |
1276 | 0 | } |
1277 | | |
1278 | | static int |
1279 | | rs_pgo_dissect_key_transfer_resp (tvbuff_t * tvb, int offset, |
1280 | | packet_info * pinfo, proto_tree * tree, |
1281 | | dcerpc_info *di, uint8_t * drep) |
1282 | 0 | { |
1283 | 0 | if (di->conformant_run) |
1284 | 0 | { |
1285 | 0 | return offset; |
1286 | 0 | } |
1287 | | |
1288 | | /* |
1289 | | [in, out] rs_pgo_query_key_t *key, |
1290 | | [out] rs_cache_data_t *cache_info, |
1291 | | [out] error_status_t *status |
1292 | | */ |
1293 | | |
1294 | 0 | offset = |
1295 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1296 | 0 | dissect_rs_pgo_query_key_t, NDR_POINTER_REF, "key:", |
1297 | 0 | -1); |
1298 | 0 | offset = |
1299 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1300 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1301 | 0 | "cache_info:", -1); |
1302 | 0 | offset = |
1303 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1304 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status:", |
1305 | 0 | -1); |
1306 | |
|
1307 | 0 | return offset; |
1308 | 0 | } |
1309 | | |
1310 | | |
1311 | | static int |
1312 | | rs_pgo_dissect_is_member_resp (tvbuff_t * tvb, int offset, |
1313 | | packet_info * pinfo, proto_tree * tree, |
1314 | | dcerpc_info *di, uint8_t * drep) |
1315 | 0 | { |
1316 | |
|
1317 | 0 | if (di->conformant_run) |
1318 | 0 | { |
1319 | 0 | return offset; |
1320 | 0 | } |
1321 | | |
1322 | | /* |
1323 | | [out] rs_cache_data_t *cache_info, |
1324 | | [out] error_status_t *status |
1325 | | */ |
1326 | 0 | offset = |
1327 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1328 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1329 | 0 | "cache_info:", -1); |
1330 | 0 | offset = |
1331 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1332 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status:", |
1333 | 0 | -1); |
1334 | |
|
1335 | 0 | return offset; |
1336 | 0 | } |
1337 | | |
1338 | | static int |
1339 | | rs_pgo_dissect_is_member_rqst (tvbuff_t * tvb, int offset, |
1340 | | packet_info * pinfo, proto_tree * tree, |
1341 | | dcerpc_info *di, uint8_t * drep) |
1342 | 0 | { |
1343 | | /* |
1344 | | [in] sec_rgy_domain_t name_domain, |
1345 | | [in] sec_rgy_name_t go_name, |
1346 | | [in] sec_rgy_name_t person_name, |
1347 | | */ |
1348 | |
|
1349 | 0 | if (di->conformant_run) |
1350 | 0 | { |
1351 | 0 | return offset; |
1352 | 0 | } |
1353 | | |
1354 | 0 | offset += 4; |
1355 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1356 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1357 | 0 | offset += 4; |
1358 | 0 | offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, di, drep); |
1359 | | |
1360 | |
|
1361 | 0 | return offset; |
1362 | |
|
1363 | 0 | } |
1364 | | |
1365 | | |
1366 | | static int |
1367 | | rs_pgo_dissect_get_rqst (tvbuff_t * tvb, int offset, |
1368 | | packet_info * pinfo, proto_tree * tree, |
1369 | | dcerpc_info *di, uint8_t * drep) |
1370 | 0 | { |
1371 | 0 | uint32_t allow_aliases; |
1372 | |
|
1373 | 0 | if (di->conformant_run) |
1374 | 0 | { |
1375 | 0 | return offset; |
1376 | 0 | } |
1377 | | |
1378 | | /* |
1379 | | [in] sec_rgy_domain_t name_domain, |
1380 | | [in] rs_pgo_query_key_t *key, |
1381 | | [in] boolean32 allow_aliases, |
1382 | | [in, out] sec_rgy_cursor_t *item_cursor, |
1383 | | */ |
1384 | | |
1385 | 0 | offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, di, drep); |
1386 | 0 | offset = |
1387 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1388 | 0 | dissect_rs_pgo_query_key_t, NDR_POINTER_REF, "key:", |
1389 | 0 | -1); |
1390 | 0 | offset = |
1391 | 0 | dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, hf_rs_var1, |
1392 | 0 | &allow_aliases); |
1393 | |
|
1394 | 0 | col_append_fstr (pinfo->cinfo, COL_INFO, " :allow_aliases:%u", |
1395 | 0 | allow_aliases); |
1396 | | |
1397 | |
|
1398 | 0 | offset += 4; /* XXX */ |
1399 | |
|
1400 | 0 | offset = |
1401 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1402 | 0 | dissect_sec_rgy_cursor_t, NDR_POINTER_REF, |
1403 | 0 | "item_cursor:", -1); |
1404 | 0 | return offset; |
1405 | |
|
1406 | 0 | } |
1407 | | |
1408 | | static int |
1409 | | rs_pgo_dissect_get_resp (tvbuff_t * tvb, int offset, |
1410 | | packet_info * pinfo, proto_tree * tree, |
1411 | | dcerpc_info *di, uint8_t * drep) |
1412 | 0 | { |
1413 | 0 | if (di->conformant_run) |
1414 | 0 | { |
1415 | 0 | return offset; |
1416 | 0 | } |
1417 | | |
1418 | | /* |
1419 | | [in, out] sec_rgy_cursor_t *item_cursor, |
1420 | | [out] rs_cache_data_t *cache_info, |
1421 | | [out] rs_pgo_query_result_t *result |
1422 | | */ |
1423 | | |
1424 | 0 | offset = |
1425 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1426 | 0 | dissect_sec_rgy_cursor_t, NDR_POINTER_REF, |
1427 | 0 | "item_cursor:", -1); |
1428 | 0 | offset = |
1429 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1430 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1431 | 0 | "cache_info:", -1); |
1432 | 0 | offset = |
1433 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1434 | 0 | dissect_rs_pgo_query_result_t, NDR_POINTER_REF, |
1435 | 0 | "result:", -1); |
1436 | |
|
1437 | 0 | return offset; |
1438 | |
|
1439 | 0 | } |
1440 | | |
1441 | | static int |
1442 | | rs_pgo_dissect_delete_member_resp (tvbuff_t * tvb, int offset, |
1443 | | packet_info * pinfo, proto_tree * tree, |
1444 | | dcerpc_info *di, uint8_t * drep) |
1445 | 0 | { |
1446 | |
|
1447 | 0 | if (di->conformant_run) |
1448 | 0 | { |
1449 | 0 | return offset; |
1450 | 0 | } |
1451 | | |
1452 | | /* |
1453 | | [out] rs_cache_data_t *cache_info, |
1454 | | [out] error_status_t *status |
1455 | | |
1456 | | */ |
1457 | | |
1458 | 0 | offset = |
1459 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1460 | 0 | dissect_rs_cache_data_t, NDR_POINTER_REF, |
1461 | 0 | "cache_info:", -1); |
1462 | 0 | offset = |
1463 | 0 | dissect_ndr_pointer(tvb, offset, pinfo, tree, di, drep, |
1464 | 0 | dissect_error_status_t, NDR_POINTER_REF, "status:", |
1465 | 0 | -1); |
1466 | |
|
1467 | 0 | return offset; |
1468 | |
|
1469 | 0 | } |
1470 | | |
1471 | | |
1472 | | static const dcerpc_sub_dissector rs_pgo_dissectors[] = { |
1473 | | {0, "add", rs_pgo_dissect_add_rqst, rs_pgo_dissect_add_resp}, |
1474 | | {1, "delete", rs_pgo_dissect_delete_rqst, rs_pgo_dissect_delete_resp}, |
1475 | | {2, "replace", rs_pgo_dissect_replace_rqst, rs_pgo_dissect_replace_resp}, |
1476 | | {3, "rename", rs_pgo_dissect_rename_rqst, rs_pgo_dissect_rename_resp}, |
1477 | | {4, "get", rs_pgo_dissect_get_rqst, rs_pgo_dissect_get_resp}, |
1478 | | {5, "key_transfer", rs_pgo_dissect_key_transfer_rqst, |
1479 | | rs_pgo_dissect_key_transfer_resp}, |
1480 | | {6, "add_member", rs_pgo_dissect_add_member_rqst, |
1481 | | rs_pgo_dissect_add_member_resp}, |
1482 | | {7, "delete_member", rs_pgo_dissect_delete_member_rqst, |
1483 | | rs_pgo_dissect_delete_member_resp}, |
1484 | | {8, "is_member", rs_pgo_dissect_is_member_rqst, |
1485 | | rs_pgo_dissect_is_member_resp}, |
1486 | | {9, "get_members", rs_pgo_dissect_get_members_rqst, NULL}, |
1487 | | {0, NULL, NULL, NULL}, |
1488 | | }; |
1489 | | |
1490 | | |
1491 | | void |
1492 | | proto_register_rs_pgo (void) |
1493 | 14 | { |
1494 | 14 | static hf_register_info hf[] = { |
1495 | 14 | {&hf_rs_pgo_opnum, |
1496 | 14 | {"Operation", "rs_pgo.opnum", FT_UINT16, BASE_DEC, NULL, 0x0, |
1497 | 14 | NULL, HFILL}}, |
1498 | 14 | {&hf_error_status_t, |
1499 | 14 | {"Error status", "rs_pgo.error_status", FT_UINT32, BASE_DEC, NULL, |
1500 | 14 | 0x0, NULL, HFILL}}, |
1501 | 14 | {&hf_rs_pgo_query_key_t, |
1502 | 14 | {"Query key", "rs_pgo.query_key", FT_UINT32, BASE_DEC, |
1503 | 14 | NULL, 0x0, NULL, HFILL}}, |
1504 | 14 | {&hf_rs_pgo_query_result_t, |
1505 | 14 | {"Query result", "rs_pgo.query_result", FT_UINT32, |
1506 | 14 | BASE_DEC, NULL, 0x0, NULL, HFILL}}, |
1507 | 14 | {&hf_rs_pgo_query_t, |
1508 | 14 | {"Query", "rs_pgo.query", FT_UINT32, BASE_DEC, NULL, |
1509 | 14 | 0x0, NULL, HFILL}}, |
1510 | 14 | {&hf_rs_sec_rgy_pgo_item_t_quota, |
1511 | 14 | {"Quota", "rs_pgo.quota", |
1512 | 14 | FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL}}, |
1513 | 14 | {&hf_rs_sec_rgy_pgo_item_t_unix_num, |
1514 | 14 | {"Unix num", |
1515 | 14 | "rs_pgo.unix_num", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, |
1516 | 14 | HFILL}}, |
1517 | 14 | {&hf_rs_timeval, |
1518 | 14 | {"Timeval", "rs_pgo.timeval", FT_RELATIVE_TIME, BASE_NONE, NULL, |
1519 | 14 | 0x0, NULL, HFILL}}, |
1520 | 14 | {&hf_rs_uuid1, |
1521 | 14 | {"Uuid1", "rs_pgo.uuid1", FT_GUID, BASE_NONE, NULL, 0x0, NULL, HFILL}}, |
1522 | 14 | {&hf_rs_var1, |
1523 | 14 | {"Var1", "rs_pgo.var1", FT_UINT32, BASE_DEC, NULL, 0x0, NULL, |
1524 | 14 | HFILL}}, |
1525 | 14 | {&hf_sec_rgy_domain_t, |
1526 | 14 | {"Domain", "rs_pgo.domain", FT_UINT32, BASE_DEC, |
1527 | 14 | NULL, 0x0, NULL, HFILL}}, |
1528 | 14 | {&hf_sec_rgy_name_t_principalName_string, |
1529 | 14 | {"Name principalName", "rs_pgo.name_principalName", FT_STRING, BASE_NONE, NULL, |
1530 | 14 | 0x0, NULL, HFILL}}, |
1531 | 14 | {&hf_sec_rgy_name_t_size, |
1532 | 14 | {"Name_t size", "rs_pgo.name_t_size", FT_UINT32, |
1533 | 14 | BASE_DEC, NULL, 0x0, NULL, HFILL}}, |
1534 | 14 | {&hf_sec_rgy_pgo_flags_t, |
1535 | 14 | {"Flags", "rs_pgo.flags", FT_UINT32, |
1536 | 14 | BASE_HEX, NULL, 0x0, NULL, HFILL}}, |
1537 | 14 | {&hf_sec_rgy_pname_t_size, |
1538 | 14 | {"Pname_t size", "rs_pgo.pname_t_size", FT_UINT32, BASE_DEC, NULL, |
1539 | 14 | 0x0, NULL, HFILL}}, |
1540 | 14 | {&hf_sec_rgy_pname_t_principalName_string, |
1541 | 14 | {"Pname principalName", "rs_pgo.pname_principalName", FT_STRING, |
1542 | 14 | BASE_NONE, NULL, 0x0, NULL, HFILL}}, |
1543 | 14 | {&hf_rs_pgo_unix_num_key_t, |
1544 | 14 | {"Unix num key", "rs_pgo.unix_num_key_t", FT_UINT32, |
1545 | 14 | BASE_DEC, |
1546 | 14 | NULL, 0x0, NULL, HFILL}} |
1547 | 14 | }; |
1548 | | |
1549 | 14 | static int *ett[] = { |
1550 | 14 | &ett_error_status_t, |
1551 | 14 | &ett_rgy_acct_user_flags_t, |
1552 | 14 | &ett_rs_pgo, |
1553 | 14 | &ett_rs_pgo_id_key_t, |
1554 | 14 | &ett_rs_pgo_query_key_t, |
1555 | 14 | &ett_rs_pgo_query_result_t, |
1556 | 14 | &ett_rs_pgo_query_t, |
1557 | 14 | &ett_rs_pgo_result_t, |
1558 | 14 | &ett_rs_pgo_unix_num_key_t, |
1559 | 14 | &ett_sec_attr_component_name_t, |
1560 | 14 | &ett_sec_passwd_type_t, |
1561 | 14 | &ett_sec_rgy_acct_admin_flags_t, |
1562 | 14 | &ett_sec_rgy_acct_admin_t, |
1563 | 14 | &ett_sec_rgy_acct_auth_flags_t, |
1564 | 14 | &ett_sec_rgy_acct_key_t, |
1565 | 14 | &ett_sec_rgy_acct_user_t, |
1566 | 14 | &ett_sec_rgy_cursor_t, |
1567 | 14 | &ett_sec_rgy_foreign_id_t, |
1568 | 14 | &ett_sec_rgy_login_name_t, |
1569 | 14 | &ett_sec_rgy_name_t, |
1570 | 14 | &ett_sec_rgy_domain_t, |
1571 | 14 | &ett_sec_rgy_pgo_flags_t, |
1572 | 14 | &ett_sec_rgy_pgo_item_t, |
1573 | 14 | &ett_sec_rgy_pname_t, |
1574 | 14 | &ett_sec_rgy_sid_t, |
1575 | 14 | &ett_sec_rgy_unix_passwd_buf_t, |
1576 | 14 | &ett_sec_rgy_unix_sid_t, |
1577 | 14 | &ett_sec_timeval_sec_t, |
1578 | 14 | &ett_rs_cache_data_t, |
1579 | 14 | }; |
1580 | 14 | proto_rs_pgo = |
1581 | 14 | proto_register_protocol ("DCE Name Service", "RS_PGO", "rs_pgo"); |
1582 | 14 | proto_register_field_array (proto_rs_pgo, hf, array_length (hf)); |
1583 | 14 | proto_register_subtree_array (ett, array_length (ett)); |
1584 | 14 | } |
1585 | | |
1586 | | void |
1587 | | proto_reg_handoff_rs_pgo (void) |
1588 | 14 | { |
1589 | | /* Register the protocol as dcerpc */ |
1590 | 14 | dcerpc_init_uuid (proto_rs_pgo, ett_rs_pgo, &uuid_rs_pgo, ver_rs_pgo, |
1591 | 14 | rs_pgo_dissectors, hf_rs_pgo_opnum); |
1592 | 14 | } |
1593 | | |
1594 | | /* |
1595 | | * Editor modelines - https://www.wireshark.org/tools/modelines.html |
1596 | | * |
1597 | | * Local Variables: |
1598 | | * c-basic-offset: 2 |
1599 | | * tab-width: 8 |
1600 | | * indent-tabs-mode: nil |
1601 | | * End: |
1602 | | * |
1603 | | * ex: set shiftwidth=2 tabstop=8 expandtab: |
1604 | | * :indentSize=2:tabSize=8:noTabs=true: |
1605 | | */ |