1 /* packet-dcerpc-rs_pgo.c
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
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
34 #ifdef HAVE_SYS_TYPES_H
35 #include <sys/types.h>
41 #include <epan/packet.h>
42 #include "packet-dcerpc.h"
43 #include "packet-dcerpc-dce122.h"
46 dissect_rgy_acct_user_flags_t
49 static int proto_rs_pgo = -1;
50 static int hf_rs_pgo_opnum = -1;
51 static int hf_rgy_name_domain = -1;
52 static int hf_rgy_sec_rgy_name_max_len = -1;
53 static int hf_rgy_sec_rgy_name_t_size = -1;
54 static int hf_rgy_sec_rgy_name_t = -1;
55 static int hf_rgy_get_rqst_name_domain = -1;
56 static int hf_rgy_get_rqst_var = -1;
57 static int hf_rgy_get_rqst_var2 = -1;
58 static int hf_rgy_get_rqst_key_size = -1;
59 static int hf_rgy_get_rqst_key_t = -1;
60 static int hf_rgy_key_transfer_rqst_var1 = -1;
61 static int hf_rgy_key_transfer_rqst_var2 = -1;
62 static int hf_rgy_key_transfer_rqst_var3 = -1;
63 static int hf_rgy_is_member_rqst_var1 = -1;
64 static int hf_rgy_is_member_rqst_var2 = -1;
65 static int hf_rgy_is_member_rqst_var3 = -1;
66 static int hf_rgy_is_member_rqst_var4 = -1;
67 static int hf_rgy_is_member_rqst_key1 = -1;
68 static int hf_rgy_is_member_rqst_key2 = -1;
69 static int hf_rgy_is_member_rqst_key1_size = -1;
70 static int hf_rgy_is_member_rqst_key2_size = -1;
71 static int hf_rs_var1 = -1;
72 static int hf_rs_pgo_query_result_t = -1;
73 static int hf_sec_rgy_pgo_item_t = -1;
74 static int hf_rs_pgo_id_key_t = -1;
75 static int hf_rs_pgo_query_t = -1;
76 static int hf_rs_pgo_query_key_t = -1;
77 static int hf_error_status_t = -1;
78 static int hf_sec_rgy_pgo_flags_t = -1;
79 static int hf_sec_passwd_version_t = -1;
80 static int hf_rgy_acct_user_flags_t = -1;
81 static int hf_rs_sec_rgy_pgo_item_t_quota = -1;
82 static int hf_rs_sec_rgy_pgo_item_t_unix_num = -1;
83 static int hf_rs_timeval = -1;
84 static int hf_rs_uuid1 = -1;
85 static int hf_sec_attr_component_name_t_handle = -1;
86 static int hf_sec_attr_component_name_t_valid = -1;
87 static int hf_sec_passwd_type_t = -1;
88 static int hf_sec_rgy_acct_admin_flags = -1;
89 static int hf_sec_rgy_acct_auth_flags_t = -1;
90 static int hf_sec_rgy_acct_key_t = -1;
91 static int hf_sec_rgy_domain_t = -1;
92 static int hf_sec_rgy_name_t_principalName_string = -1;
93 static int hf_sec_rgy_name_t_size = -1;
94 static int hf_sec_rgy_pname_t_principalName_string = -1;
95 static int hf_sec_rgy_pname_t_size = -1;
96 static int hf_sec_rgy_unix_sid_t_group = -1;
97 static int hf_sec_rgy_unix_sid_t_org = -1;
98 static int hf_sec_rgy_unix_sid_t_person = -1;
99 static int hf_sec_timeval_sec_t = -1;
100 static int hf_rs_pgo_unix_num_key_t = -1;
102 static gint ett_rs_cache_data_t = -1;
103 static gint ett_sec_rgy_domain_t = -1;
104 static gint ett_rgy_acct_user_flags_t = -1;
105 static gint ett_sec_attr_component_name_t = -1;
106 static gint ett_sec_passwd_type_t = -1;
107 static gint ett_sec_rgy_acct_admin_flags_t = -1;
108 static gint ett_sec_rgy_acct_admin_t = -1;
109 static gint ett_sec_rgy_acct_auth_flags_t = -1;
110 static gint ett_sec_rgy_acct_key_t = -1;
111 static gint ett_sec_rgy_acct_user_t = -1;
112 static gint ett_sec_rgy_cursor_t = -1;
113 static gint ett_sec_rgy_foreign_id_t = -1;
114 static gint ett_sec_rgy_login_name_t = -1;
115 static gint ett_sec_rgy_name_t = -1;
116 static gint ett_sec_rgy_pgo_item_t = -1;
117 static gint ett_sec_rgy_pname_t = -1;
118 static gint ett_sec_rgy_sid_t = -1;
119 static gint ett_sec_rgy_unix_passwd_buf_t = -1;
120 static gint ett_sec_rgy_unix_sid_t = -1;
121 static gint ett_sec_timeval_sec_t = -1;
122 static gint ett_sec_rgy_pgo_flags_t = -1;
123 static gint ett_error_status_t = -1;
124 static gint ett_rs_pgo_query_t = -1;
125 static gint ett_rs_pgo_query_key_t = -1;
126 static gint ett_rs_pgo_id_key_t = -1;
127 static gint ett_rs_pgo_unix_num_key_t = -1;
128 static gint ett_rs_pgo_query_result_t = -1;
129 static gint ett_rs_pgo_result_t = -1;
132 #define sec_rgy_acct_admin_valid 0x1
133 #define sec_rgy_acct_admin_audit 0x2
134 #define sec_rgy_acct_admin_server 0x4
135 #define sec_rgy_acct_admin_client 0x8
136 #define sec_rgy_acct_admin_flags_none 0
137 #define sec_rgy_acct_auth_post_dated 0x1
138 #define sec_rgy_acct_auth_forwardable 0x2
139 #define sec_rgy_acct_auth_tgt 0x4
140 #define sec_rgy_acct_auth_renewable 0x8
141 #define sec_rgy_acct_auth_proxiable 0x10
142 #define sec_rgy_acct_auth_dup_skey 0x20
143 #define sec_rgy_acct_auth_user_to_user 0x40
144 #define sec_rgy_acct_auth_flags_none 0
145 #define sec_rgy_acct_user_passwd_valid 0x1
146 #define sec_rgy_acct_user_flags_none 0
147 #define rs_acct_part_user 0x1
148 #define rs_acct_part_admin 0x2
149 #define rs_acct_part_passwd 0x4
150 #define rs_acct_part_unused 0x8
151 #define rs_acct_part_login_name 0x10
152 #define sec_rgy_pgo_is_an_alias 0x1
153 #define sec_rgy_pgo_is_required 0x2
154 #define sec_rgy_pgo_projlist_ok 0x4
155 #define sec_rgy_pgo_flags_none 0
156 #define sec_rgy_acct_user_passwd_valid 0x1
157 #define sec_rgy_acct_user_flags_none 0
159 static gint ett_rs_pgo = -1;
161 static e_uuid_t uuid_rs_pgo =
162 { 0x4c878280, 0x3000, 0x0000, {0x0d, 0x00, 0x02, 0x87, 0x14, 0x00, 0x00,
165 static guint16 ver_rs_pgo = 1;
169 dissect_error_status_t (tvbuff_t * tvb, int offset,
170 packet_info * pinfo, proto_tree * parent_tree,
173 proto_item *item = NULL;
174 proto_tree *tree = NULL;
175 int old_offset = offset;
180 di = pinfo->private_data;
181 if (di->conformant_run)
188 item = proto_tree_add_text (parent_tree, tvb, offset, -1,
190 tree = proto_item_add_subtree (item, ett_error_status_t);
194 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_error_status_t,
196 st_str = val_to_str (st, dce_error_vals, "%u");
198 if (check_col (pinfo->cinfo, COL_INFO))
199 col_append_fstr (pinfo->cinfo, COL_INFO, " st:%s ", st_str);
201 proto_item_set_len (item, offset - old_offset);
207 dissect_sec_rgy_pname_t (tvbuff_t * tvb, int offset,
208 packet_info * pinfo, proto_tree * parent_tree,
213 proto_item *item = NULL;
214 proto_tree *tree = NULL;
215 int old_offset = offset;
216 #define sec_rgy_pname_t_size 257
218 dissect sec_rgy_pname const signed32 sec_rgy_pname_t_size = 257; * Include final '\0' *
219 typedef [string] char sec_rgy_pname_t[sec_rgy_pname_t_size];
222 const guint8 *namestring;
225 di = pinfo->private_data;
226 if (di->conformant_run)
235 proto_tree_add_text (parent_tree, tvb, offset, -1, "sec_rgy_pname_t");
236 tree = proto_item_add_subtree (item, ett_sec_rgy_pname_t);
240 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
241 hf_sec_rgy_pname_t_size, &string_size);
242 if (check_col (pinfo->cinfo, COL_INFO))
243 col_append_fstr (pinfo->cinfo, COL_INFO, " String_size:%u", string_size);
244 if (string_size < sec_rgy_pname_t_size)
246 /* proto_tree_add_string(tree, id, tvb, start, length, value_ptr); */
248 proto_tree_add_string (tree, hf_sec_rgy_pname_t_principalName_string,
249 tvb, offset, string_size, tvb_get_ptr (tvb,
254 namestring = tvb_get_ptr (tvb, offset, string_size);
255 if (check_col (pinfo->cinfo, COL_INFO))
256 col_append_fstr (pinfo->cinfo, COL_INFO, " Principal:%s",
259 offset += string_size;
263 if (check_col (pinfo->cinfo, COL_INFO))
264 col_append_fstr (pinfo->cinfo, COL_INFO,
265 " :FIXME!: Invalid string length of %u",
269 proto_item_set_len (item, offset - old_offset);
274 dissect_sec_rgy_pgo_flags_t (tvbuff_t * tvb, int offset,
275 packet_info * pinfo, proto_tree * parent_tree,
283 proto_item *item = NULL;
284 proto_tree *tree = NULL;
285 int old_offset = offset;
290 typedef bitset sec_rgy_pgo_flags_t;
293 di = pinfo->private_data;
294 if (di->conformant_run)
303 proto_tree_add_text (parent_tree, tvb, offset, -1,
304 "sec_rgy_pgo_flags_t ");
305 tree = proto_item_add_subtree (item, ett_sec_rgy_pgo_flags_t);
309 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
310 hf_sec_rgy_pgo_flags_t, &flags);
314 * s e c _ r g y _ p g o _ f l a g s _ t
317 * pgo item is an alias *
318 const unsigned32 sec_rgy_pgo_is_an_alias = 0x1;
320 * pgo item is required - cannot be deleted *
321 const unsigned32 sec_rgy_pgo_is_required = 0x2;
324 * projlist_ok: on person items indicates person can have a concurrent
325 * group set on group items indicates this group can appear on a
326 * concurrent group set. On org items this flag is undefined.
328 const unsigned32 sec_rgy_pgo_projlist_ok = 0x4;
333 const unsigned32 sec_rgy_pgo_flags_none = 0;
335 #define sec_rgy_pgo_is_an_alias 0x1
336 #define sec_rgy_pgo_is_required 0x2
337 #define sec_rgy_pgo_projlist_ok 0x4
338 #define sec_rgy_pgo_flags_none 0
341 if (check_col (pinfo->cinfo, COL_INFO))
342 col_append_str (pinfo->cinfo, COL_INFO, " PgoFlags=");
343 if ((flags & sec_rgy_pgo_is_an_alias) == sec_rgy_pgo_is_an_alias)
345 if (check_col (pinfo->cinfo, COL_INFO))
346 col_append_str (pinfo->cinfo, COL_INFO, ":IS_AN_ALIAS");
348 if ((flags & sec_rgy_pgo_is_required) == sec_rgy_pgo_is_required)
350 if (check_col (pinfo->cinfo, COL_INFO))
351 col_append_str (pinfo->cinfo, COL_INFO, ":IS_REQUIRED");
353 if ((flags & sec_rgy_pgo_projlist_ok) == sec_rgy_pgo_projlist_ok)
355 if (check_col (pinfo->cinfo, COL_INFO))
356 col_append_str (pinfo->cinfo, COL_INFO, ":PROJLIST_OK");
358 if ((flags & sec_rgy_acct_admin_client) == sec_rgy_acct_admin_client)
360 if (check_col (pinfo->cinfo, COL_INFO))
361 col_append_str (pinfo->cinfo, COL_INFO, ":NONE");
363 if ((flags & sec_rgy_pgo_flags_none) == sec_rgy_pgo_flags_none)
365 if (check_col (pinfo->cinfo, COL_INFO))
366 col_append_str (pinfo->cinfo, COL_INFO, ":NONE");
369 proto_item_set_len (item, offset - old_offset);
377 dissect_rs_cache_data_t (tvbuff_t * tvb, int offset,
378 packet_info * pinfo, proto_tree * parent_tree,
385 sec_timeval_sec_t person_dtm;
386 sec_timeval_sec_t group_dtm;
387 sec_timeval_sec_t org_dtm;
392 proto_item *item = NULL;
393 proto_tree *tree = NULL;
394 int old_offset = offset;
396 guint32 person_dtm, group_dtm, org_dtm;
400 di = pinfo->private_data;
401 if (di->conformant_run)
410 proto_tree_add_text (parent_tree, tvb, offset, -1, "rs_cache_data_t");
411 tree = proto_item_add_subtree (item, ett_rs_cache_data_t);
416 dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep, hf_rs_uuid1, &uuid1);
418 dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep, hf_rs_timeval,
421 dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep, hf_rs_timeval,
424 dissect_dcerpc_time_t (tvb, offset, pinfo, tree, drep, hf_rs_timeval,
427 if (check_col (pinfo->cinfo, COL_INFO))
428 col_append_fstr (pinfo->cinfo, COL_INFO,
429 " siteid %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x person_dtm:%u group_dtm:%u org_dtm:%u",
430 uuid1.Data1, uuid1.Data2, uuid1.Data3, uuid1.Data4[0],
431 uuid1.Data4[1], uuid1.Data4[2], uuid1.Data4[3],
432 uuid1.Data4[4], uuid1.Data4[5], uuid1.Data4[6],
433 uuid1.Data4[7], person_dtm, group_dtm, org_dtm);
435 proto_item_set_len (item, offset - old_offset);
442 dissect_sec_rgy_name_t (tvbuff_t * tvb, int offset,
443 packet_info * pinfo, proto_tree * parent_tree,
448 proto_item *item = NULL;
449 proto_tree *tree = NULL;
450 int old_offset = offset;
451 #define sec_rgy_name_t_size 1025
452 /* typedef [string] char sec_rgy_name_t[sec_rgy_name_t_size]; */
454 const guint8 *namestring;
457 di = pinfo->private_data;
458 if (di->conformant_run)
467 proto_tree_add_text (parent_tree, tvb, offset, -1, "sec_rgy_name_t");
468 tree = proto_item_add_subtree (item, ett_sec_rgy_name_t);
472 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
473 hf_sec_rgy_name_t_size, &string_size);
474 if (check_col (pinfo->cinfo, COL_INFO))
475 col_append_fstr (pinfo->cinfo, COL_INFO, " String_size:%u", string_size);
476 if (string_size < sec_rgy_name_t_size)
478 /* proto_tree_add_string(tree, id, tvb, start, length, value_ptr); */
480 proto_tree_add_string (tree, hf_sec_rgy_name_t_principalName_string,
481 tvb, offset, string_size, tvb_get_ptr (tvb,
486 namestring = tvb_get_ptr (tvb, offset, string_size);
487 if (check_col (pinfo->cinfo, COL_INFO))
488 col_append_fstr (pinfo->cinfo, COL_INFO, " Principal:%s",
491 offset += string_size;
495 if (check_col (pinfo->cinfo, COL_INFO))
496 col_append_fstr (pinfo->cinfo, COL_INFO,
497 " :FIXME!: Invalid string length of %u",
501 proto_item_set_len (item, offset - old_offset);
507 dissect_sec_rgy_domain_t (tvbuff_t * tvb, int offset,
508 packet_info * pinfo, proto_tree * parent_tree,
513 typedef signed32 sec_rgy_domain_t;
516 proto_item *item = NULL;
517 proto_tree *tree = NULL;
518 int old_offset = offset;
522 di = pinfo->private_data;
523 if (di->conformant_run)
532 proto_tree_add_text (parent_tree, tvb, offset, -1, "sec_rgy_domain_t");
533 tree = proto_item_add_subtree (item, ett_sec_rgy_domain_t);
538 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_sec_rgy_domain_t,
541 if (check_col (pinfo->cinfo, COL_INFO))
542 col_append_fstr (pinfo->cinfo, COL_INFO, " sec_rgy_domain_t:%u",
546 proto_item_set_len (item, offset - old_offset);
551 dissect_sec_rgy_pgo_item_t (tvbuff_t * tvb, int offset,
552 packet_info * pinfo, proto_tree * parent_tree,
561 sec_rgy_pgo_flags_t flags;
562 sec_rgy_pname_t fullname;
563 } sec_rgy_pgo_item_t;
567 proto_item *item = NULL;
568 proto_tree *tree = NULL;
569 int old_offset = offset;
572 guint32 unix_num, quota;
574 di = pinfo->private_data;
575 if (di->conformant_run)
584 proto_tree_add_text (parent_tree, tvb, offset, -1,
585 " sec_rgy_pgo_item_t ");
586 tree = proto_item_add_subtree (item, ett_sec_rgy_pgo_item_t);
590 dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep, hf_rs_uuid1, &id);
592 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
593 hf_rs_sec_rgy_pgo_item_t_unix_num, &unix_num);
595 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
596 hf_rs_sec_rgy_pgo_item_t_quota, "a);
597 offset = dissect_sec_rgy_pgo_flags_t (tvb, offset, pinfo, tree, drep);
598 offset += 4; /* XXX */
599 offset = dissect_sec_rgy_pname_t (tvb, offset, pinfo, tree, drep);
601 if (check_col (pinfo->cinfo, COL_INFO))
602 col_append_fstr (pinfo->cinfo, COL_INFO,
603 " sec_rgy_pgo_item_t - id %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x unix_num:%u quota:%u",
604 id.Data1, id.Data2, id.Data3, id.Data4[0],
605 id.Data4[1], id.Data4[2], id.Data4[3],
606 id.Data4[4], id.Data4[5], id.Data4[6],
607 id.Data4[7], unix_num, quota);
609 proto_item_set_len (item, offset - old_offset);
615 dissect_sec_rgy_cursor_t (tvbuff_t * tvb, int offset,
616 packet_info * pinfo, proto_tree * parent_tree,
621 * Database cursor for iterative operations
632 proto_item *item = NULL;
633 proto_tree *tree = NULL;
634 int old_offset = offset;
637 guint32 handle, valid;
639 di = pinfo->private_data;
640 if (di->conformant_run)
649 proto_tree_add_text (parent_tree, tvb, offset, -1,
650 " sec_rgy_cursor_t ");
651 tree = proto_item_add_subtree (item, ett_sec_rgy_cursor_t);
655 dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep, hf_rs_uuid1, &source);
657 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
658 hf_rs_sec_rgy_pgo_item_t_unix_num, &handle);
660 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
661 hf_rs_sec_rgy_pgo_item_t_quota, &valid);
663 if (check_col (pinfo->cinfo, COL_INFO))
664 col_append_fstr (pinfo->cinfo, COL_INFO,
665 " sec_rgy_cursor_t - source %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x handle:%u valid:%u",
666 source.Data1, source.Data2, source.Data3,
667 source.Data4[0], source.Data4[1], source.Data4[2],
668 source.Data4[3], source.Data4[4], source.Data4[5],
669 source.Data4[6], source.Data4[7], handle, valid);
671 proto_item_set_len (item, offset - old_offset);
676 dissect_rs_pgo_query_t (tvbuff_t * tvb, int offset,
677 packet_info * pinfo, proto_tree * parent_tree,
685 rs_pgo_query_unix_num,
691 proto_item *item = NULL;
692 proto_tree *tree = NULL;
693 int old_offset = offset;
697 di = pinfo->private_data;
698 if (di->conformant_run)
707 proto_tree_add_text (parent_tree, tvb, offset, -1, "rs_pgo_query_t ");
708 tree = proto_item_add_subtree (item, ett_rs_pgo_query_t);
711 dissect_ndr_uint8 (tvb, offset, pinfo, tree, drep, hf_rs_pgo_query_t,
713 if (check_col (pinfo->cinfo, COL_INFO))
714 col_append_str (pinfo->cinfo, COL_INFO, " rs_pgo_query_t:");
718 case rs_pgo_query_name:
719 if (check_col (pinfo->cinfo, COL_INFO))
720 col_append_str (pinfo->cinfo, COL_INFO, "NAME");
722 case rs_pgo_query_id:
723 if (check_col (pinfo->cinfo, COL_INFO))
724 col_append_str (pinfo->cinfo, COL_INFO, "ID");
726 case rs_pgo_query_unix_num:
727 if (check_col (pinfo->cinfo, COL_INFO))
728 col_append_str (pinfo->cinfo, COL_INFO, "UNIX_NUM");
730 case rs_pgo_query_next:
731 if (check_col (pinfo->cinfo, COL_INFO))
732 col_append_str (pinfo->cinfo, COL_INFO, "NEXT");
734 case rs_pgo_query_none:
735 if (check_col (pinfo->cinfo, COL_INFO))
736 col_append_str (pinfo->cinfo, COL_INFO, "NONE");
739 if (check_col (pinfo->cinfo, COL_INFO))
740 col_append_fstr (pinfo->cinfo, COL_INFO, " unknown:%u", query_t);
746 proto_item_set_len (item, offset - old_offset);
750 dissect_rs_pgo_id_key_t (tvbuff_t * tvb, int offset,
751 packet_info * pinfo, proto_tree * parent_tree,
758 sec_rgy_name_t scope;
763 proto_item *item = NULL;
764 proto_tree *tree = NULL;
765 int old_offset = offset;
769 di = pinfo->private_data;
770 if (di->conformant_run)
779 proto_tree_add_text (parent_tree, tvb, offset, -1,
781 tree = proto_item_add_subtree (item, ett_rs_pgo_id_key_t);
785 dissect_ndr_uuid_t (tvb, offset, pinfo, tree, drep, hf_rs_uuid1, &id);
786 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
788 if (check_col (pinfo->cinfo, COL_INFO))
789 col_append_fstr (pinfo->cinfo, COL_INFO,
790 " rs_pgo_id_key_t - id %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
791 id.Data1, id.Data2, id.Data3, id.Data4[0],
792 id.Data4[1], id.Data4[2], id.Data4[3],
793 id.Data4[4], id.Data4[5], id.Data4[6], id.Data4[7]);
795 proto_item_set_len (item, offset - old_offset);
801 dissect_rs_pgo_result_t (tvbuff_t * tvb, int offset,
802 packet_info * pinfo, proto_tree * parent_tree,
809 sec_rgy_pgo_item_t item;
815 proto_item *item = NULL;
816 proto_tree *tree = NULL;
817 int old_offset = offset;
820 di = pinfo->private_data;
821 if (di->conformant_run)
829 proto_tree_add_text (parent_tree, tvb, offset, -1,
831 tree = proto_item_add_subtree (item, ett_rs_pgo_result_t);
834 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
835 offset = dissect_sec_rgy_pgo_item_t (tvb, offset, pinfo, tree, drep);
837 proto_item_set_len (item, offset - old_offset);
844 dissect_rs_pgo_unix_num_key_t (tvbuff_t * tvb, int offset,
845 packet_info * pinfo, proto_tree * parent_tree,
852 sec_rgy_name_t scope;
853 } rs_pgo_unix_num_key_t;
860 proto_item *item = NULL;
861 proto_tree *tree = NULL;
862 int old_offset = offset;
864 guint32 rs_pgo_unix_num_key_t;
866 di = pinfo->private_data;
867 if (di->conformant_run)
876 proto_tree_add_text (parent_tree, tvb, offset, -1,
877 " rs_pgo_unix_num_key_t ");
878 tree = proto_item_add_subtree (item, ett_rs_pgo_unix_num_key_t);
882 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
883 hf_rs_pgo_unix_num_key_t, &rs_pgo_unix_num_key_t);
884 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
886 if (check_col (pinfo->cinfo, COL_INFO))
887 col_append_fstr (pinfo->cinfo, COL_INFO,
888 " rs_pgo_unix_num_key_t:%u", rs_pgo_unix_num_key_t);
890 proto_item_set_len (item, offset - old_offset);
896 dissect_rs_pgo_query_key_t (tvbuff_t * tvb, int offset,
897 packet_info * pinfo, proto_tree * parent_tree,
905 rs_pgo_query_unix_num,
910 typedef union switch (rs_pgo_query_t query) tagged_union {
911 case rs_pgo_query_name:
914 case rs_pgo_query_id:
915 rs_pgo_id_key_t id_key;
917 case rs_pgo_query_unix_num:
918 rs_pgo_unix_num_key_t unix_num_key;
920 case rs_pgo_query_next:
921 sec_rgy_name_t scope;
924 ; * empty branch of union *
926 } rs_pgo_query_key_t;
930 proto_item *item = NULL;
931 proto_tree *tree = NULL;
932 int old_offset = offset;
936 di = pinfo->private_data;
937 if (di->conformant_run)
946 proto_tree_add_text (parent_tree, tvb, offset, -1,
947 "rs_pgo_query_key_t ");
948 tree = proto_item_add_subtree (item, ett_rs_pgo_query_key_t);
951 dissect_ndr_uint16 (tvb, offset, pinfo, tree, drep, hf_rs_pgo_query_key_t,
953 if (check_col (pinfo->cinfo, COL_INFO))
954 col_append_str (pinfo->cinfo, COL_INFO, " rs_pgo_query_key_t:");
958 case rs_pgo_query_name:
959 if (check_col (pinfo->cinfo, COL_INFO))
960 col_append_str (pinfo->cinfo, COL_INFO, "NAME");
961 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
963 case rs_pgo_query_id:
964 if (check_col (pinfo->cinfo, COL_INFO))
965 col_append_str (pinfo->cinfo, COL_INFO, "ID");
966 offset = dissect_rs_pgo_id_key_t (tvb, offset, pinfo, tree, drep);
968 case rs_pgo_query_unix_num:
969 if (check_col (pinfo->cinfo, COL_INFO))
970 col_append_str (pinfo->cinfo, COL_INFO, "UNIX_NUM");
971 offset = dissect_rs_pgo_unix_num_key_t (tvb, offset, pinfo, tree, drep);
973 case rs_pgo_query_next:
974 if (check_col (pinfo->cinfo, COL_INFO))
975 col_append_str (pinfo->cinfo, COL_INFO, "NEXT");
976 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
978 case rs_pgo_query_none:
979 if (check_col (pinfo->cinfo, COL_INFO))
980 col_append_str (pinfo->cinfo, COL_INFO, "NONE");
984 if (check_col (pinfo->cinfo, COL_INFO))
985 col_append_fstr (pinfo->cinfo, COL_INFO, " unknown:%u", query_t);
989 proto_item_set_len (item, offset - old_offset);
995 dissect_rs_pgo_query_result_t (tvbuff_t * tvb, int offset,
996 packet_info * pinfo, proto_tree * parent_tree,
999 proto_item *item = NULL;
1000 proto_tree *tree = NULL;
1001 int old_offset = offset;
1005 #define error_status_ok 0
1008 typedef union switch (signed32 status) tagged_union {
1009 case error_status_ok:
1010 rs_pgo_result_t result;
1013 ; * empty branch of union *
1015 } rs_pgo_query_result_t;
1018 di = pinfo->private_data;
1019 if (di->conformant_run)
1026 item = proto_tree_add_text (parent_tree, tvb, offset, -1,
1027 "rs_pgo_query_result_t");
1028 tree = proto_item_add_subtree (item, ett_rs_pgo_query_result_t);
1032 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep,
1033 hf_rs_pgo_query_result_t, &st);
1034 status = val_to_str (st, dce_error_vals, "%u");
1036 if (check_col (pinfo->cinfo, COL_INFO))
1037 col_append_fstr (pinfo->cinfo, COL_INFO, " status:%s ", status);
1039 offset += 4; /* XXX */
1043 case error_status_ok:
1044 offset = dissect_rs_pgo_result_t (tvb, offset, pinfo, tree, drep);
1051 proto_item_set_len (item, offset - old_offset);
1058 rs_pgo_dissect_add_rqst (tvbuff_t * tvb, int offset,
1059 packet_info * pinfo, proto_tree * tree,
1064 di = pinfo->private_data;
1065 if (di->conformant_run)
1071 [in] sec_rgy_domain_t name_domain,
1072 [in] sec_rgy_name_t pgo_name,
1073 [in] sec_rgy_pgo_item_t *pgo_item,
1076 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1078 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1080 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1081 dissect_sec_rgy_pgo_item_t, NDR_POINTER_REF,
1082 "sec_rgy_pgo_item_t: ", -1);
1087 rs_pgo_dissect_add_resp (tvbuff_t * tvb, int offset,
1088 packet_info * pinfo, proto_tree * tree,
1092 guint32 buff_remain;
1094 di = pinfo->private_data;
1095 if (di->conformant_run)
1101 [out] rs_cache_data_t *cache_info,
1102 [out] error_status_t *status
1105 buff_remain = tvb_length_remaining(tvb, offset);
1107 /* found several add_member responses that had 8 bytes of data. first was 4 0's and last was 3 zeros and a 1 */
1108 if (buff_remain > 8) {
1110 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1111 dissect_rs_cache_data_t, NDR_POINTER_REF,
1112 "cache_info: ", -1);
1115 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1116 dissect_error_status_t, NDR_POINTER_REF, "status: ",
1122 rs_pgo_dissect_delete_rqst (tvbuff_t * tvb, int offset,
1123 packet_info * pinfo, proto_tree * tree,
1128 di = pinfo->private_data;
1129 if (di->conformant_run)
1135 [in] sec_rgy_domain_t name_domain,
1136 [in] sec_rgy_name_t pgo_name,
1138 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1139 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1145 rs_pgo_dissect_delete_resp (tvbuff_t * tvb, int offset,
1146 packet_info * pinfo, proto_tree * tree,
1150 guint32 buff_remain;
1152 di = pinfo->private_data;
1153 if (di->conformant_run)
1159 [out] rs_cache_data_t *cache_info,
1160 [out] error_status_t *status
1162 buff_remain = tvb_length_remaining(tvb, offset);
1164 /* found several add_member responses that had 8 bytes of data. first was 4 0's and last was 3 zeros and a 1 */
1166 if (buff_remain > 8) {
1168 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1169 dissect_rs_cache_data_t, NDR_POINTER_REF,
1174 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1175 dissect_error_status_t, NDR_POINTER_REF, "status:",
1182 rs_pgo_dissect_replace_rqst (tvbuff_t * tvb, int offset,
1183 packet_info * pinfo, proto_tree * tree,
1188 di = pinfo->private_data;
1189 if (di->conformant_run)
1195 [in] sec_rgy_domain_t name_domain,
1196 [in] sec_rgy_name_t pgo_name,
1197 [in] sec_rgy_pgo_item_t *pgo_item,
1199 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1200 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1202 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1203 dissect_sec_rgy_pgo_item_t, NDR_POINTER_REF,
1210 rs_pgo_dissect_replace_resp (tvbuff_t * tvb, int offset,
1211 packet_info * pinfo, proto_tree * tree,
1216 di = pinfo->private_data;
1217 if (di->conformant_run)
1223 [out] rs_cache_data_t *cache_info,
1224 [out] error_status_t *status
1229 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1230 dissect_rs_cache_data_t, NDR_POINTER_REF,
1233 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1234 dissect_error_status_t, NDR_POINTER_REF, "status:",
1242 rs_pgo_dissect_add_member_rqst (tvbuff_t * tvb, int offset,
1243 packet_info * pinfo, proto_tree * tree,
1249 di = pinfo->private_data;
1250 if (di->conformant_run)
1258 [in] sec_rgy_domain_t name_domain,
1259 [in] sec_rgy_name_t go_name,
1260 [in] sec_rgy_name_t person_name,
1263 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1264 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1265 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1272 rs_pgo_dissect_rename_rqst (tvbuff_t * tvb, int offset,
1273 packet_info * pinfo, proto_tree * tree,
1278 di = pinfo->private_data;
1279 if (di->conformant_run)
1285 [in] sec_rgy_domain_t name_domain,
1286 [in] sec_rgy_name_t old_name,
1287 [in] sec_rgy_name_t new_name,
1289 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1290 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1291 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1298 rs_pgo_dissect_rename_resp (tvbuff_t * tvb, int offset,
1299 packet_info * pinfo, proto_tree * tree,
1304 di = pinfo->private_data;
1305 if (di->conformant_run)
1311 [out] rs_cache_data_t *cache_info,
1312 [out] error_status_t *status
1315 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1316 dissect_rs_cache_data_t, NDR_POINTER_REF,
1319 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1320 dissect_error_status_t, NDR_POINTER_REF, "status:",
1328 rs_pgo_dissect_add_member_resp (tvbuff_t * tvb, int offset,
1329 packet_info * pinfo, proto_tree * tree,
1333 guint32 buff_remain;
1335 di = pinfo->private_data;
1336 if (di->conformant_run)
1342 [out] rs_cache_data_t *cache_info,
1343 [out] error_status_t *status
1346 buff_remain = tvb_length_remaining(tvb, offset);
1348 /* found several add responses that had 8 bytes of data. first was 4 0's and last was 3 zeros and a 1 */
1349 if (buff_remain > 8) {
1352 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1353 dissect_rs_cache_data_t, NDR_POINTER_REF,
1357 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1358 dissect_error_status_t, NDR_POINTER_REF, "status:",
1366 rs_pgo_dissect_delete_member_rqst (tvbuff_t * tvb, int offset,
1367 packet_info * pinfo, proto_tree * tree,
1372 di = pinfo->private_data;
1373 if (di->conformant_run)
1379 void rs_pgo_delete_member (
1380 [in] sec_rgy_domain_t name_domain,
1381 [in] sec_rgy_name_t go_name,
1382 [in] sec_rgy_name_t person_name,
1386 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1387 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1388 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1396 rs_pgo_dissect_get_members_rqst (tvbuff_t * tvb, int offset,
1397 packet_info * pinfo, proto_tree * tree,
1401 guint32 max_members;
1404 di = pinfo->private_data;
1405 if (di->conformant_run)
1411 [in] sec_rgy_domain_t name_domain,
1412 [in] sec_rgy_name_t go_name,
1413 [in, out] sec_rgy_cursor_t *member_cursor,
1414 [in] signed32 max_members,
1417 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1419 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1421 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1422 dissect_sec_rgy_cursor_t, NDR_POINTER_REF,
1423 "member_cursor:", -1);
1425 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_rs_var1,
1428 if (check_col (pinfo->cinfo, COL_INFO))
1429 col_append_fstr (pinfo->cinfo, COL_INFO, " :max_members:%u", max_members);
1435 rs_pgo_dissect_key_transfer_rqst (tvbuff_t * tvb, int offset,
1436 packet_info * pinfo, proto_tree * tree,
1441 di = pinfo->private_data;
1442 if (di->conformant_run)
1448 [in] sec_rgy_domain_t name_domain,
1449 [in] rs_pgo_query_t requested_result_type,
1450 [in, out] rs_pgo_query_key_t *key,
1454 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1455 offset = dissect_rs_pgo_query_t (tvb, offset, pinfo, tree, drep);
1457 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1458 dissect_rs_pgo_query_key_t, NDR_POINTER_REF, "key:",
1465 rs_pgo_dissect_key_transfer_resp (tvbuff_t * tvb, int offset,
1466 packet_info * pinfo, proto_tree * tree,
1471 di = pinfo->private_data;
1472 if (di->conformant_run)
1478 [in, out] rs_pgo_query_key_t *key,
1479 [out] rs_cache_data_t *cache_info,
1480 [out] error_status_t *status
1484 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1485 dissect_rs_pgo_query_key_t, NDR_POINTER_REF, "key:",
1488 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1489 dissect_rs_cache_data_t, NDR_POINTER_REF,
1492 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1493 dissect_error_status_t, NDR_POINTER_REF, "status:",
1501 rs_pgo_dissect_is_member_resp (tvbuff_t * tvb, int offset,
1502 packet_info * pinfo, proto_tree * tree,
1507 di = pinfo->private_data;
1508 if (di->conformant_run)
1514 [out] rs_cache_data_t *cache_info,
1515 [out] error_status_t *status
1518 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1519 dissect_rs_cache_data_t, NDR_POINTER_REF,
1522 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1523 dissect_error_status_t, NDR_POINTER_REF, "status:",
1530 rs_pgo_dissect_is_member_rqst (tvbuff_t * tvb, int offset,
1531 packet_info * pinfo, proto_tree * tree,
1536 [in] sec_rgy_domain_t name_domain,
1537 [in] sec_rgy_name_t go_name,
1538 [in] sec_rgy_name_t person_name,
1542 di = pinfo->private_data;
1543 if (di->conformant_run)
1549 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1550 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1552 offset = dissect_sec_rgy_name_t (tvb, offset, pinfo, tree, drep);
1561 rs_pgo_dissect_get_rqst (tvbuff_t * tvb, int offset,
1562 packet_info * pinfo, proto_tree * tree,
1566 guint32 allow_aliases;
1568 di = pinfo->private_data;
1569 if (di->conformant_run)
1575 [in] sec_rgy_domain_t name_domain,
1576 [in] rs_pgo_query_key_t *key,
1577 [in] boolean32 allow_aliases,
1578 [in, out] sec_rgy_cursor_t *item_cursor,
1581 offset = dissect_sec_rgy_domain_t (tvb, offset, pinfo, tree, drep);
1583 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1584 dissect_rs_pgo_query_key_t, NDR_POINTER_REF, "key:",
1587 dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_rs_var1,
1590 if (check_col (pinfo->cinfo, COL_INFO))
1591 col_append_fstr (pinfo->cinfo, COL_INFO, " :allow_aliases:%u",
1595 offset += 4; /* XXX */
1598 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1599 dissect_sec_rgy_cursor_t, NDR_POINTER_REF,
1600 "item_cursor:", -1);
1606 rs_pgo_dissect_get_resp (tvbuff_t * tvb, int offset,
1607 packet_info * pinfo, proto_tree * tree,
1613 di = pinfo->private_data;
1614 if (di->conformant_run)
1620 [in, out] sec_rgy_cursor_t *item_cursor,
1621 [out] rs_cache_data_t *cache_info,
1622 [out] rs_pgo_query_result_t *result
1626 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1627 dissect_sec_rgy_cursor_t, NDR_POINTER_REF,
1628 "item_cursor:", -1);
1630 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1631 dissect_rs_cache_data_t, NDR_POINTER_REF,
1634 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1635 dissect_rs_pgo_query_result_t, NDR_POINTER_REF,
1643 rs_pgo_dissect_delete_member_resp (tvbuff_t * tvb, int offset,
1644 packet_info * pinfo, proto_tree * tree,
1650 di = pinfo->private_data;
1651 if (di->conformant_run)
1657 [out] rs_cache_data_t *cache_info,
1658 [out] error_status_t *status
1663 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1664 dissect_rs_cache_data_t, NDR_POINTER_REF,
1667 dissect_ndr_pointer (tvb, offset, pinfo, tree, drep,
1668 dissect_error_status_t, NDR_POINTER_REF, "status:",
1676 static dcerpc_sub_dissector rs_pgo_dissectors[] = {
1677 {0, "add", rs_pgo_dissect_add_rqst, rs_pgo_dissect_add_resp},
1678 {1, "delete", rs_pgo_dissect_delete_rqst, rs_pgo_dissect_delete_resp},
1679 {2, "replace", rs_pgo_dissect_replace_rqst, rs_pgo_dissect_replace_resp},
1680 {3, "rename", rs_pgo_dissect_rename_rqst, rs_pgo_dissect_rename_resp},
1681 {4, "get", rs_pgo_dissect_get_rqst, rs_pgo_dissect_get_resp},
1682 {5, "key_transfer", rs_pgo_dissect_key_transfer_rqst,
1683 rs_pgo_dissect_key_transfer_resp},
1684 {6, "add_member", rs_pgo_dissect_add_member_rqst,
1685 rs_pgo_dissect_add_member_resp},
1686 {7, "delete_member", rs_pgo_dissect_delete_member_rqst,
1687 rs_pgo_dissect_delete_member_resp},
1688 {8, "is_member", rs_pgo_dissect_is_member_rqst,
1689 rs_pgo_dissect_is_member_resp},
1690 {9, "get_members", rs_pgo_dissect_get_members_rqst, NULL},
1691 {0, NULL, NULL, NULL},
1696 proto_register_rs_pgo (void)
1698 static hf_register_info hf[] = {
1700 {"Operation", "rs_pgo.opnum", FT_UINT16, BASE_DEC, NULL, 0x0,
1701 "Operation", HFILL}},
1702 {&hf_error_status_t,
1703 {"hf_error_status_t", "hf_error_status_t", FT_UINT32, BASE_DEC, NULL,
1705 {&hf_rgy_acct_user_flags_t,
1706 {"hf_rgy_acct_user_flags_t", "hf_rgy_acct_user_flags_t", FT_UINT32,
1707 BASE_DEC, NULL, 0x0, "", HFILL}},
1708 {&hf_rgy_get_rqst_key_size,
1709 {"hf_rgy_get_rqst_key_size", "hf_rgy_get_rqst_key_size", FT_UINT32,
1710 BASE_DEC, NULL, 0x0, "", HFILL}},
1711 {&hf_rgy_get_rqst_key_t,
1712 {"hf_rgy_get_rqst_key_t", "hf_rgy_get_rqst_key_t", FT_UINT32, BASE_DEC,
1713 NULL, 0x0, "", HFILL}},
1714 {&hf_rgy_get_rqst_name_domain,
1715 {"hf_rgy_get_rqst_name_domain", "hf_rgy_get_rqst_name_domain",
1716 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1717 {&hf_rgy_get_rqst_var,
1718 {"hf_rgy_get_rqst_var", "hf_rgy_get_rqst_var", FT_UINT32, BASE_DEC,
1719 NULL, 0x0, "", HFILL}},
1720 {&hf_rgy_get_rqst_var2,
1721 {"hf_rgy_get_rqst_var2", "hf_rgy_get_rqst_var2", FT_UINT32, BASE_DEC,
1722 NULL, 0x0, "", HFILL}},
1723 {&hf_rgy_is_member_rqst_key1,
1724 {"hf_rgy_is_member_rqst_key1", "hf_rgy_is_member_rqst_key1", FT_UINT32,
1725 BASE_DEC, NULL, 0x0, "", HFILL}},
1726 {&hf_rgy_is_member_rqst_key1_size,
1727 {"hf_rgy_is_member_rqst_key1_size", "hf_rgy_is_member_rqst_key1_size",
1728 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1729 {&hf_rgy_is_member_rqst_key2,
1730 {"hf_rgy_is_member_rqst_key2", "hf_rgy_is_member_rqst_key2", FT_UINT32,
1731 BASE_DEC, NULL, 0x0, "", HFILL}},
1732 {&hf_rgy_is_member_rqst_key2_size,
1733 {"hf_rgy_is_member_rqst_key2_size", "hf_rgy_is_member_rqst_key2_size",
1734 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1735 {&hf_rgy_is_member_rqst_var1,
1736 {"hf_rgy_is_member_rqst_var1", "hf_rgy_is_member_rqst_var1", FT_UINT32,
1737 BASE_DEC, NULL, 0x0, "", HFILL}},
1738 {&hf_rgy_is_member_rqst_var2,
1739 {"hf_rgy_is_member_rqst_var2", "hf_rgy_is_member_rqst_var2", FT_UINT32,
1740 BASE_DEC, NULL, 0x0, "", HFILL}},
1741 {&hf_rgy_is_member_rqst_var3,
1742 {"hf_rgy_is_member_rqst_var3", "hf_rgy_is_member_rqst_var3", FT_UINT32,
1743 BASE_DEC, NULL, 0x0, "", HFILL}},
1744 {&hf_rgy_is_member_rqst_var4,
1745 {"hf_rgy_is_member_rqst_var4", "hf_rgy_is_member_rqst_var4", FT_UINT32,
1746 BASE_DEC, NULL, 0x0, "", HFILL}},
1747 {&hf_rgy_key_transfer_rqst_var1,
1748 {"hf_rgy_key_transfer_rqst_var1", "hf_rgy_key_transfer_rqst_var1",
1749 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1750 {&hf_rgy_key_transfer_rqst_var2,
1751 {"hf_rgy_key_transfer_rqst_var2", "hf_rgy_key_transfer_rqst_var2",
1752 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1753 {&hf_rgy_key_transfer_rqst_var3,
1754 {"hf_rgy_key_transfer_rqst_var3", "hf_rgy_key_transfer_rqst_var3",
1755 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1756 {&hf_rgy_name_domain,
1757 {"hf_rgy_name_domain", "hf_rgy_name_domain", FT_UINT32, BASE_DEC, NULL,
1759 {&hf_rgy_sec_rgy_name_max_len,
1760 {"hf_rgy_sec_rgy_name_max_len", "hf_rgy_sec_rgy_name_max_len",
1761 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1762 {&hf_rgy_sec_rgy_name_t,
1763 {"hf_rgy_sec_rgy_name_t", "hf_rgy_sec_rgy_name_t", FT_UINT32, BASE_DEC,
1764 NULL, 0x0, "", HFILL}},
1765 {&hf_rgy_sec_rgy_name_t_size,
1766 {"hf_rgy_sec_rgy_name_t_size", "hf_rgy_sec_rgy_name_t_size", FT_UINT32,
1767 BASE_DEC, NULL, 0x0, "", HFILL}},
1768 {&hf_rs_pgo_id_key_t,
1769 {"hf_rs_pgo_id_key_t", "hf_rs_pgo_id_key_t", FT_UINT32, BASE_DEC, NULL,
1771 {&hf_rs_pgo_query_key_t,
1772 {"hf_rs_pgo_query_key_t", "hf_rs_pgo_query_key_t", FT_UINT32, BASE_DEC,
1773 NULL, 0x0, "", HFILL}},
1774 {&hf_rs_pgo_query_result_t,
1775 {"hf_rs_pgo_query_result_t", "hf_rs_pgo_query_result_t", FT_UINT32,
1776 BASE_DEC, NULL, 0x0, "", HFILL}},
1777 {&hf_rs_pgo_query_t,
1778 {"hf_rs_pgo_query_t", "hf_rs_pgo_query_t", FT_UINT32, BASE_DEC, NULL,
1780 {&hf_rs_sec_rgy_pgo_item_t_quota,
1781 {"hf_rs_sec_rgy_pgo_item_t_quota", "hf_rs_sec_rgy_pgo_item_t_quota",
1782 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1783 {&hf_rs_sec_rgy_pgo_item_t_unix_num,
1784 {"hf_rs_sec_rgy_pgo_item_t_unix_num",
1785 "hf_rs_sec_rgy_pgo_item_t_unix_num", FT_UINT32, BASE_DEC, NULL, 0x0, "",
1788 {"hf_rs_timeval", "hf_rs_timeval", FT_RELATIVE_TIME, BASE_DEC, NULL,
1791 {"hf_rs_uuid1", "hf_rs_uuid1", FT_GUID, BASE_NONE, NULL, 0x0, "UUID",
1794 {"hf_rs_var1", "hf_rs_var1", FT_UINT32, BASE_DEC, NULL, 0x0, "",
1796 {&hf_sec_attr_component_name_t_handle,
1797 {"hf_sec_attr_component_name_t_handle",
1798 "hf_sec_attr_component_name_t_handle", FT_UINT32, BASE_DEC, NULL, 0x0,
1800 {&hf_sec_attr_component_name_t_valid,
1801 {"hf_sec_attr_component_name_t_valid",
1802 "hf_sec_attr_component_name_t_valid", FT_UINT32, BASE_DEC, NULL, 0x0,
1804 {&hf_sec_passwd_type_t,
1805 {"hf_sec_passwd_type_t", "hf_sec_passwd_type_t", FT_UINT32, BASE_DEC,
1806 NULL, 0x0, "", HFILL}},
1807 {&hf_sec_passwd_version_t,
1808 {"hf_sec_passwd_version_t", "hf_sec_passwd_version_t", FT_UINT32,
1809 BASE_DEC, NULL, 0x0, "", HFILL}},
1810 {&hf_sec_rgy_acct_admin_flags,
1811 {"hf_sec_rgy_acct_admin_flags", "hf_sec_rgy_acct_admin_flags",
1812 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1813 {&hf_sec_rgy_acct_auth_flags_t,
1814 {"hf_sec_rgy_acct_auth_flags_t", "hf_sec_rgy_acct_auth_flags_t",
1815 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1816 {&hf_sec_rgy_acct_key_t,
1817 {"hf_sec_rgy_acct_key_t", "hf_sec_rgy_acct_key_t", FT_UINT32, BASE_DEC,
1818 NULL, 0x0, "", HFILL}},
1819 {&hf_sec_rgy_domain_t,
1820 {"hf_sec_rgy_domain_t", "hf_sec_rgy_domain_t", FT_UINT32, BASE_DEC,
1821 NULL, 0x0, "", HFILL}},
1822 {&hf_sec_rgy_name_t_principalName_string,
1823 {"hf_sec_rgy_name_t_principalName_string",
1824 "hf_sec_rgy_name_t_principalName_string", FT_STRING, BASE_NONE, NULL,
1826 {&hf_sec_rgy_name_t_size,
1827 {"hf_sec_rgy_name_t_size", "hf_sec_rgy_name_t_size", FT_UINT32,
1828 BASE_DEC, NULL, 0x0, "", HFILL}},
1829 {&hf_sec_rgy_pgo_flags_t,
1830 {"hf_sec_rgy_pgo_flags_t", "hf_sec_rgy_pgo_flags_t", FT_UINT32,
1831 BASE_HEX, NULL, 0x0, "", HFILL}},
1832 {&hf_sec_rgy_pgo_item_t,
1833 {"hf_sec_rgy_pgo_item_t", "hf_sec_rgy_pgo_item_t", FT_UINT32, BASE_DEC,
1834 NULL, 0x0, "", HFILL}},
1835 {&hf_sec_rgy_pname_t_size,
1836 {"hf_sec_rgy_pname_t_size",
1837 "hf_sec_rgy_pname_t_size", FT_UINT32, BASE_DEC, NULL,
1839 {&hf_sec_rgy_pname_t_principalName_string,
1840 {"hf_sec_rgy_pname_t_principalName_string",
1841 "hf_sec_rgy_pname_t_principalName_string", FT_STRING, BASE_NONE, NULL,
1843 {&hf_sec_rgy_unix_sid_t_group,
1844 {"hf_sec_rgy_unix_sid_t_group", "hf_sec_rgy_unix_sid_t_group",
1845 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1846 {&hf_sec_rgy_unix_sid_t_org,
1847 {"hf_sec_rgy_unix_sid_t_org", "hf_sec_rgy_unix_sid_t_org", FT_UINT32,
1848 BASE_DEC, NULL, 0x0, "", HFILL}},
1849 {&hf_sec_rgy_unix_sid_t_person,
1850 {"hf_sec_rgy_unix_sid_t_person", "hf_sec_rgy_unix_sid_t_person",
1851 FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL}},
1852 {&hf_sec_timeval_sec_t,
1853 {"hf_sec_timeval_sec_t", "hf_sec_timeval_sec_t", FT_UINT32, BASE_DEC,
1854 NULL, 0x0, "", HFILL}},
1855 {&hf_rs_pgo_unix_num_key_t,
1856 {"hf_rs_pgo_unix_num_key_t", "hf_rs_pgo_unix_num_key_t", FT_UINT32,
1858 NULL, 0x0, "", HFILL}},
1862 static gint *ett[] = {
1863 &ett_error_status_t,
1864 &ett_rgy_acct_user_flags_t,
1866 &ett_rs_pgo_id_key_t,
1867 &ett_rs_pgo_query_key_t,
1868 &ett_rs_pgo_query_result_t,
1869 &ett_rs_pgo_query_t,
1870 &ett_rs_pgo_result_t,
1871 &ett_rs_pgo_unix_num_key_t,
1872 &ett_sec_attr_component_name_t,
1873 &ett_sec_passwd_type_t,
1874 &ett_sec_rgy_acct_admin_flags_t,
1875 &ett_sec_rgy_acct_admin_t,
1876 &ett_sec_rgy_acct_auth_flags_t,
1877 &ett_sec_rgy_acct_key_t,
1878 &ett_sec_rgy_acct_user_t,
1879 &ett_sec_rgy_cursor_t,
1880 &ett_sec_rgy_foreign_id_t,
1881 &ett_sec_rgy_login_name_t,
1882 &ett_sec_rgy_name_t,
1883 &ett_sec_rgy_domain_t,
1884 &ett_sec_rgy_pgo_flags_t,
1885 &ett_sec_rgy_pgo_item_t,
1886 &ett_sec_rgy_pname_t,
1888 &ett_sec_rgy_unix_passwd_buf_t,
1889 &ett_sec_rgy_unix_sid_t,
1890 &ett_sec_timeval_sec_t,
1891 &ett_rs_cache_data_t,
1894 proto_register_protocol ("DCE Name Service", "RS_PGO", "rs_pgo");
1895 proto_register_field_array (proto_rs_pgo, hf, array_length (hf));
1896 proto_register_subtree_array (ett, array_length (ett));
1900 proto_reg_handoff_rs_pgo (void)
1902 /* Register the protocol as dcerpc */
1903 dcerpc_init_uuid (proto_rs_pgo, ett_rs_pgo, &uuid_rs_pgo, ver_rs_pgo,
1904 rs_pgo_dissectors, hf_rs_pgo_opnum);