2 * Routines for Novell SecretStore Services
3 * Greg Morris <gmorris@novell.com>
4 * Copyright (c) Novell, Inc. 2002-2003
8 * Wireshark - Network traffic analyzer
9 * By Gerald Combs <gerald@wireshark.org>
10 * Copyright 1998 Gerald Combs
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
32 #include <epan/packet.h>
33 #include <epan/strutil.h>
34 #include "packet-ncp-int.h"
35 #include "packet-ncp-sss.h"
37 static gint ett_sss = -1;
39 static int proto_sss = -1;
40 static int hf_buffer_size = -1;
41 static int hf_ping_version = -1;
42 static int hf_flags = -1;
43 static int hf_context = -1;
44 static int hf_frag_handle = -1;
45 static int hf_length = -1;
46 static int hf_verb = -1;
47 static int hf_user = -1;
48 static int hf_secret = -1;
49 static int hf_sss_version = -1;
50 static int hf_return_code = -1;
51 static int hf_enc_cred = -1;
52 static int hf_enc_data = -1;
53 static int hfbit1 = -1;
54 static int hfbit2 = -1;
55 static int hfbit3 = -1;
56 static int hfbit4 = -1;
57 static int hfbit5 = -1;
58 static int hfbit6 = -1;
59 static int hfbit7 = -1;
60 static int hfbit8 = -1;
61 static int hfbit9 = -1;
62 static int hfbit10 = -1;
63 static int hfbit11 = -1;
64 static int hfbit12 = -1;
65 static int hfbit13 = -1;
66 static int hfbit14 = -1;
67 static int hfbit15 = -1;
68 static int hfbit16 = -1;
69 static int hfbit17 = -1;
70 static int hfbit18 = -1;
71 static int hfbit19 = -1;
72 static int hfbit20 = -1;
73 static int hfbit21 = -1;
74 static int hfbit22 = -1;
75 static int hfbit23 = -1;
76 static int hfbit24 = -1;
77 static int hfbit25 = -1;
78 static int hfbit26 = -1;
79 static int hfbit27 = -1;
80 static int hfbit28 = -1;
81 static int hfbit29 = -1;
82 static int hfbit30 = -1;
83 static int hfbit31 = -1;
84 static int hfbit32 = -1;
86 static const value_string sss_func_enum[] = {
87 { 0x00000001, "Ping Server" },
88 { 0x00000002, "Fragment" },
89 { 0x00000003, "Write App Secrets" },
90 { 0x00000004, "Add Secret ID" },
91 { 0x00000005, "Remove Secret ID" },
92 { 0x00000006, "Remove SecretStore" },
93 { 0x00000007, "Enumerate Secret IDs" },
94 { 0x00000008, "Unlock Store" },
95 { 0x00000009, "Set Master Password" },
96 { 0x0000000a, "Get Service Information" },
101 static const value_string sss_verb_enum[] = {
102 { 0x00000000, "Query Server" },
103 { 0x00000001, "Read App Secrets" },
104 { 0x00000002, "Write App Secrets" },
105 { 0x00000003, "Add Secret ID" },
106 { 0x00000004, "Remove Secret ID" },
107 { 0x00000005, "Remove SecretStore" },
108 { 0x00000006, "Enumerate Secret IDs" },
109 { 0x00000007, "Unlock Store" },
110 { 0x00000008, "Set Master Password" },
111 { 0x00000009, "Get Service Information" },
112 { 0x000000ff, "Fragment"},
116 static const value_string sss_errors_enum[] = {
117 { 0xFFFFFCE0, "(-800) Target object could not be found" },
118 { 0xFFFFFCDF, "(-801) NICI operations have failed" },
119 { 0xFFFFFCDE, "(-802) The Secret ID is not in the user secret store" },
120 { 0xFFFFFCDD, "(-803) Some internal operating system services have not been available" },
121 { 0xFFFFFCDC, "(-804) Access to the target Secret Store has been denied" },
122 { 0xFFFFFCDB, "(-805) NDS internal NDS services have not been available" },
123 { 0xFFFFFCDA, "(-806) Secret has not been initialized with a write" },
124 { 0xFFFFFCD9, "(-807) Size of the buffer is not in a nominal range between minimum and maximum" },
125 { 0xFFFFFCD8, "(-808) Client and server components are not of the compatible versions" },
126 { 0xFFFFFCD7, "(-809) Secret Store data on the server has been corrupted" },
127 { 0xFFFFFCD6, "(-810) Secret ID already exists in the SecretStore" },
128 { 0xFFFFFCD5, "(-811) User NDS password has been changed by the administrator" },
129 { 0xFFFFFCD4, "(-812) Target NDS user object not found" },
130 { 0xFFFFFCD3, "(-813) Target NDS user object does not have a Secret Store" },
131 { 0xFFFFFCD2, "(-814) Secret Store is not on the network" },
132 { 0xFFFFFCD1, "(-815) Length of the Secret ID buffer exceeds the limit" },
133 { 0xFFFFFCD0, "(-816) Length of the enumeration buffer is too short" },
134 { 0xFFFFFCCF, "(-817) User not authenticated" },
135 { 0xFFFFFCCE, "(-818) Not supported operations" },
136 { 0xFFFFFCCD, "(-819) Typed in NDS password not valid" },
137 { 0xFFFFFCCC, "(-820) Session keys of the client and server NICI are out of sync" },
138 { 0xFFFFFCCB, "(-821) Requested service not yet supported" },
139 { 0xFFFFFCCA, "(-822) NDS authentication type not supported" },
140 { 0xFFFFFCC9, "(-823) Unicode text conversion operation failed" },
141 { 0xFFFFFCC8, "(-824) Connection to server is lost" },
142 { 0xFFFFFCC7, "(-825) Cryptographic operation failed" },
143 { 0xFFFFFCC6, "(-826) Opening a connection to the server failed" },
144 { 0xFFFFFCC5, "(-827) Access to server connection failed" },
145 { 0xFFFFFCC4, "(-828) Size of the enumeration buffer exceeds the limit" },
146 { 0xFFFFFCC3, "(-829) Size of the Secret buffer exceeds the limit" },
147 { 0xFFFFFCC2, "(-830) Length of the Secret ID should be greater than zero" },
148 { 0xFFFFFCC1, "(-831) Protocol data corrupted on the wire" },
149 { 0xFFFFFCC0, "(-832) Enhanced protection's password validation failed. Access to the secret denied" },
150 { 0xFFFFFCBF, "(-833) Schema is not extended to support SecretStore on the target tree" },
151 { 0xFFFFFCBE, "(-834) One of the optional service attributes is not instantiated" },
152 { 0xFFFFFCBD, "(-835) Server has been upgraded and the users SecretStore should be updated" },
153 { 0xFFFFFCBC, "(-836) Master password could not be verified to read or unlock the secrets" },
154 { 0xFFFFFCBB, "(-837) Master password has not been set on the SecretStore" },
155 { 0xFFFFFCBA, "(-838) Ability to use master password has been disabled" },
156 { 0xFFFFFCB9, "(-839) Not a writeable replica of NDS" },
157 { 0xFFFFFCB8, "(-840) The API was unable to find a value for an attribute in the Directory" },
158 { 0xFFFFFCB7, "(-841) A parameter passed to the API has not been properly initialized" },
159 { 0xFFFFFCB6, "(-842) The connection to SecretStore requires SSL to be secure" },
160 { 0xFFFFFCB5, "(-843) The client could not locate a server that supports the policy override required by the caller" },
161 { 0xFFFFFCB4, "(-844) Attempt to unlock SecretStore failed because the store is not locked" },
162 { 0xFFFFFCB3, "(-845) NDS Replica on the server that holds SecretStore is out of sync with the replica ring" },
163 { 0xFFFFFC88, "(-888) Feature not yet implemented" },
164 { 0xFFFFFC7D, "(-899) Products BETA life has expired" },
170 process_flags(proto_tree *sss_tree, tvbuff_t *tvb, guint32 foffset)
172 gchar flags_str[1024];
175 proto_tree *flags_tree;
183 flags = tvb_get_ntohl(tvb, foffset);
184 for (i = 0 ; i < 256; i++)
188 g_strlcat(flags_str, sep, 1024);
192 g_strlcat(flags_str, "Enhanced Protection", 1024);
195 g_strlcat(flags_str, "Create ID", 1024);
198 g_strlcat(flags_str, "Remove Lock", 1024);
201 g_strlcat(flags_str, "Repair", 1024);
204 g_strlcat(flags_str, "Unicode", 1024);
207 g_strlcat(flags_str, "EP Master Password Used", 1024);
210 g_strlcat(flags_str, "EP Password Used", 1024);
213 g_strlcat(flags_str, "Set Tree Name", 1024);
216 g_strlcat(flags_str, "Get Context", 1024);
219 g_strlcat(flags_str, "Destroy Context", 1024);
222 g_strlcat(flags_str, "Not Defined", 1024);
225 g_strlcat(flags_str, "Not Defined", 1024);
228 g_strlcat(flags_str, "EP Lock", 1024);
231 g_strlcat(flags_str, "Not Initialized", 1024);
234 g_strlcat(flags_str, "Enhanced Protection", 1024);
237 g_strlcat(flags_str, "Store Not Synced", 1024);
240 g_strlcat(flags_str, "Admin Last Modified", 1024);
243 g_strlcat(flags_str, "EP Password Present", 1024);
246 g_strlcat(flags_str, "EP Master Password Present", 1024);
249 g_strlcat(flags_str, "MP Disabled", 1024);
252 g_strlcat(flags_str, "Not Defined", 1024);
255 g_strlcat(flags_str, "Not Defined", 1024);
258 g_strlcat(flags_str, "Not Defined", 1024);
261 g_strlcat(flags_str, "Not Defined", 1024);
264 g_strlcat(flags_str, "Not Defined", 1024);
267 g_strlcat(flags_str, "Not Defined", 1024);
270 g_strlcat(flags_str, "Not Defined", 1024);
273 g_strlcat(flags_str, "Not Defined", 1024);
276 g_strlcat(flags_str, "Not Defined", 1024);
279 g_strlcat(flags_str, "Not Defined", 1024);
282 g_strlcat(flags_str, "Not Defined", 1024);
285 g_strlcat(flags_str, "Not Defined", 1024);
295 tinew = proto_tree_add_uint_format(sss_tree, hf_flags, tvb, foffset, 4, flags, "%s 0x%08x", "Flags:", flags);
296 flags_tree = proto_item_add_subtree(tinew, ett_nds);
300 for (i = 0 ; i < 256; i++ )
307 proto_tree_add_item(flags_tree, hfbit1, tvb, foffset, 4, FALSE);
310 proto_tree_add_item(flags_tree, hfbit2, tvb, foffset, 4, FALSE);
313 proto_tree_add_item(flags_tree, hfbit3, tvb, foffset, 4, FALSE);
316 proto_tree_add_item(flags_tree, hfbit4, tvb, foffset, 4, FALSE);
319 proto_tree_add_item(flags_tree, hfbit5, tvb, foffset, 4, FALSE);
322 proto_tree_add_item(flags_tree, hfbit6, tvb, foffset, 4, FALSE);
325 proto_tree_add_item(flags_tree, hfbit7, tvb, foffset, 4, FALSE);
328 proto_tree_add_item(flags_tree, hfbit8, tvb, foffset, 4, FALSE);
331 proto_tree_add_item(flags_tree, hfbit9, tvb, foffset, 4, FALSE);
334 proto_tree_add_item(flags_tree, hfbit10, tvb, foffset, 4, FALSE);
337 proto_tree_add_item(flags_tree, hfbit11, tvb, foffset, 4, FALSE);
340 proto_tree_add_item(flags_tree, hfbit12, tvb, foffset, 4, FALSE);
343 proto_tree_add_item(flags_tree, hfbit13, tvb, foffset, 4, FALSE);
346 proto_tree_add_item(flags_tree, hfbit14, tvb, foffset, 4, FALSE);
349 proto_tree_add_item(flags_tree, hfbit15, tvb, foffset, 4, FALSE);
352 proto_tree_add_item(flags_tree, hfbit16, tvb, foffset, 4, FALSE);
355 proto_tree_add_item(flags_tree, hfbit17, tvb, foffset, 4, FALSE);
358 proto_tree_add_item(flags_tree, hfbit18, tvb, foffset, 4, FALSE);
361 proto_tree_add_item(flags_tree, hfbit19, tvb, foffset, 4, FALSE);
364 proto_tree_add_item(flags_tree, hfbit20, tvb, foffset, 4, FALSE);
367 proto_tree_add_item(flags_tree, hfbit21, tvb, foffset, 4, FALSE);
370 proto_tree_add_item(flags_tree, hfbit22, tvb, foffset, 4, FALSE);
373 proto_tree_add_item(flags_tree, hfbit23, tvb, foffset, 4, FALSE);
376 proto_tree_add_item(flags_tree, hfbit24, tvb, foffset, 4, FALSE);
379 proto_tree_add_item(flags_tree, hfbit25, tvb, foffset, 4, FALSE);
382 proto_tree_add_item(flags_tree, hfbit26, tvb, foffset, 4, FALSE);
385 proto_tree_add_item(flags_tree, hfbit27, tvb, foffset, 4, FALSE);
388 proto_tree_add_item(flags_tree, hfbit28, tvb, foffset, 4, FALSE);
391 proto_tree_add_item(flags_tree, hfbit29, tvb, foffset, 4, FALSE);
394 proto_tree_add_item(flags_tree, hfbit30, tvb, foffset, 4, FALSE);
397 proto_tree_add_item(flags_tree, hfbit31, tvb, foffset, 4, FALSE);
400 proto_tree_add_item(flags_tree, hfbit32, tvb, foffset, 4, FALSE);
412 find_delimiter(tvbuff_t *tvb, int foffset)
418 for (i=0; i < 256; i++)
420 c_char = tvb_get_guint8(tvb, foffset);
421 if (c_char == 0x2a || tvb_length_remaining(tvb, foffset)==0)
432 sss_string(tvbuff_t* tvb, int hfinfo, proto_tree *sss_tree, int offset, gboolean little, guint32 length)
434 int foffset = offset;
439 guint32 length_remaining = 0;
444 str_length = tvb_get_letohl(tvb, foffset);
448 str_length = tvb_get_ntohl(tvb, foffset);
456 length_remaining = tvb_length_remaining(tvb, foffset);
457 if(str_length > (guint)length_remaining || str_length > 1024)
459 proto_tree_add_string(sss_tree, hfinfo, tvb, foffset,
460 length_remaining + 4, "<String too long to process>");
461 foffset += length_remaining;
466 proto_tree_add_string(sss_tree, hfinfo, tvb, offset,
467 4, "<Not Specified>");
470 for ( i = 0; i < str_length; i++ )
472 c_char = tvb_get_guint8(tvb, foffset );
473 if (c_char<0x20 || c_char>0x7e)
478 buffer[i] = c_char & 0xff;
488 buffer[i] = c_char & 0xff;
493 if(length_remaining==1)
504 str_length = tvb_get_letohl(tvb, offset);
508 str_length = tvb_get_ntohl(tvb, offset);
516 proto_tree_add_string(sss_tree, hfinfo, tvb, offset,
522 dissect_sss_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ncp_tree, ncp_req_hash_value *request_value)
524 guint8 /*func,*/ subfunc = 0;
526 guint32 msg_length=0;
532 if (tvb_length_remaining(tvb, foffset)<4) {
536 /*func = tvb_get_guint8(tvb, foffset);*/
538 subfunc = tvb_get_guint8(tvb, foffset);
541 /* Fill in the PROTOCOL & INFO columns. */
542 col_set_str(pinfo->cinfo, COL_PROTOCOL, "NSSS");
543 if (check_col(pinfo->cinfo, COL_INFO)) {
544 col_add_fstr(pinfo->cinfo, COL_INFO, "C SecretStore - %s", val_to_str(subfunc, sss_func_enum, "Unknown (%d)"));
548 aitem = proto_tree_add_text(ncp_tree, tvb, foffset, tvb_length_remaining(tvb, foffset), "Packet Type: %s", val_to_str(subfunc, sss_func_enum, "Unknown (%d)"));
549 atree = proto_item_add_subtree(aitem, ett_sss);
550 proto_tree_add_item(atree, hf_ping_version, tvb, foffset, 4, TRUE);
552 proto_tree_add_item(atree, hf_flags, tvb, foffset, 4, TRUE);
556 proto_tree_add_item(ncp_tree, hf_frag_handle, tvb, foffset, 4, TRUE);
557 if (tvb_get_letohl(tvb, foffset)==0xffffffff) /* Fragment handle of -1 means no fragment. So process packet */
560 proto_tree_add_item(ncp_tree, hf_buffer_size, tvb, foffset, 4, TRUE);
562 proto_tree_add_item(ncp_tree, hf_length, tvb, foffset, 4, TRUE);
564 foffset += 12; /* Blank Context */
565 subverb = tvb_get_letohl(tvb, foffset);
566 if (check_col(pinfo->cinfo, COL_INFO)) {
567 col_append_fstr(pinfo->cinfo, COL_INFO, ", %s", val_to_str(subverb, sss_verb_enum, "Unknown (%d)"));
569 aitem = proto_tree_add_item(ncp_tree, hf_verb, tvb, foffset, 4, TRUE);
570 atree = proto_item_add_subtree(aitem, ett_sss);
572 request_value->req_nds_flags=subverb;
575 process_flags(atree, tvb, foffset);
577 proto_tree_add_item(atree, hf_context, tvb, foffset, 4, FALSE);
582 foffset = sss_string(tvb, hf_user, atree, foffset, TRUE, 0);
585 foffset = sss_string(tvb, hf_secret, atree, foffset, TRUE, 0);
586 msg_length = tvb_get_letohl(tvb, foffset);
587 foffset += (msg_length+4); /* Unsure of what this length and parameter are */
588 /* A bad secret of length greater then 256 characters will cause frag
589 packets and then we will see these as malformed packets.
590 So check to make sure we still have data in the packet anytime
592 if (tvb_length_remaining(tvb, foffset) > 4)
594 foffset = sss_string(tvb, hf_user, atree, foffset, TRUE, 0);
599 foffset = sss_string(tvb, hf_secret, atree, foffset, TRUE, 0);
600 if (tvb_length_remaining(tvb, foffset) > 4)
602 msg_length = tvb_get_letohl(tvb, foffset);
604 if (tvb_length_remaining(tvb, foffset) < (gint) msg_length)
606 proto_tree_add_item(atree, hf_enc_data, tvb, foffset, -1, TRUE);
610 proto_tree_add_item(atree, hf_enc_data, tvb, foffset, msg_length, TRUE);
616 foffset = sss_string(tvb, hf_secret, atree, foffset, TRUE, 0);
617 if (tvb_length_remaining(tvb, foffset) > 4)
619 foffset = sss_string(tvb, hf_user, atree, foffset, TRUE, 0);
625 foffset = sss_string(tvb, hf_secret, atree, foffset, TRUE, 0);
626 if (tvb_length_remaining(tvb, foffset) > 4)
628 foffset = sss_string(tvb, hf_user, atree, foffset, TRUE, 0);
632 msg_length = tvb_get_letohl(tvb, foffset);
634 proto_tree_add_item(atree, hf_enc_cred, tvb, foffset, msg_length, FALSE);
645 if (check_col(pinfo->cinfo, COL_INFO)) {
646 col_set_str(pinfo->cinfo, COL_INFO, "C SecretStore - fragment");
647 proto_tree_add_text(ncp_tree, tvb, foffset, 4, "Fragment");
649 /* Fragments don't really carry a subverb so store 0xff as the subverb number */
651 request_value->req_nds_flags=255;
653 if (tvb_length_remaining(tvb, foffset) > 8)
656 proto_tree_add_item(ncp_tree, hf_enc_data, tvb, foffset, tvb_length_remaining(tvb, foffset), TRUE);
669 dissect_sss_reply(tvbuff_t *tvb, packet_info *pinfo, proto_tree *ncp_tree, guint8 subfunc, ncp_req_hash_value *request_value)
673 guint32 msg_length=0;
674 guint32 return_code=0;
675 guint32 number_of_items=0;
676 gint32 length_of_string=0;
682 proto_item *expert_item;
686 col_set_str(pinfo->cinfo, COL_PROTOCOL, "NSSS");
687 if (tvb_length_remaining(tvb, foffset)<4) {
690 aitem = proto_tree_add_text(ncp_tree, tvb, foffset, -1, "Function: %s", val_to_str(subfunc, sss_func_enum, "val_to_str"));
691 atree = proto_item_add_subtree(aitem, ett_sss);
694 proto_tree_add_item(atree, hf_flags, tvb, foffset, 4, TRUE);
696 proto_tree_add_item(atree, hf_sss_version, tvb, foffset, 4, TRUE);
701 subverb = request_value->req_nds_flags;
702 str = match_strval(subverb, sss_verb_enum);
704 proto_tree_add_text(atree, tvb, foffset, tvb_length_remaining(tvb, foffset), "Verb: %s", str);
707 proto_tree_add_item(atree, hf_length, tvb, foffset, 4, TRUE);
708 msg_length = tvb_get_letohl(tvb, foffset);
709 return_code = tvb_get_ntohl(tvb, foffset+msg_length);
711 proto_tree_add_item(atree, hf_frag_handle, tvb, foffset, 4, TRUE);
714 if ((tvb_get_letohl(tvb, foffset-4)==0xffffffff) && (msg_length > 4))
717 return_code = tvb_get_letohl(tvb, foffset);
718 str = match_strval(return_code, sss_errors_enum);
721 expert_item = proto_tree_add_item(atree, hf_return_code, tvb, foffset, 4, TRUE);
722 expert_add_info_format(pinfo, expert_item, PI_RESPONSE_CODE, PI_ERROR, "SSS Error: %s", str);
723 if (check_col(pinfo->cinfo, COL_INFO)) {
724 col_add_fstr(pinfo->cinfo, COL_INFO, "R Error - %s", val_to_str(return_code, sss_errors_enum, "Unknown (%d)"));
730 proto_tree_add_text(atree, tvb, foffset, 4, "Return Code: Success (0x00000000)");
731 if (tvb_length_remaining(tvb, foffset) > 8) {
733 if (request_value && subverb == 6)
736 number_of_items = tvb_get_letohl(tvb, foffset);
738 for (i=0; i<number_of_items; i++)
740 length_of_string = find_delimiter(tvb, foffset);
741 if (length_of_string > tvb_length_remaining(tvb, foffset))
745 foffset = sss_string(tvb, hf_secret, atree, foffset, TRUE, length_of_string);
746 if (tvb_length_remaining(tvb, foffset) < 8)
756 proto_tree_add_item(atree, hf_enc_data, tvb, foffset, tvb_length_remaining(tvb, foffset), TRUE);
763 proto_tree_add_text(atree, tvb, foffset, 4, "Return Code: Success (0x00000000)");
764 if (tvb_length_remaining(tvb, foffset) > 8) {
766 proto_tree_add_item(atree, hf_enc_data, tvb, foffset, tvb_length_remaining(tvb, foffset), TRUE);
778 proto_register_sss(void)
780 static hf_register_info hf_sss[] = {
782 { "Buffer Size", "sss.buffer", FT_UINT32, BASE_DEC, NULL, 0x0,
786 { "Ping Version", "sss.ping_version", FT_UINT32, BASE_HEX, NULL, 0x0,
790 { "Flags", "sss.flags", FT_UINT32, BASE_HEX, NULL, 0x0,
794 { "Context", "sss.context", FT_UINT32, BASE_HEX, NULL, 0x0,
798 { "Fragment Handle", "sss.frag_handle", FT_UINT32, BASE_HEX, NULL, 0x0,
802 { "Length", "sss.length", FT_UINT32, BASE_DEC, NULL, 0x0,
806 { "Verb", "sss.verb",
807 FT_UINT32, BASE_HEX, VALS(sss_verb_enum), 0x0,
811 { "User", "sss.user",
812 FT_STRING, BASE_NONE, NULL, 0x0,
816 { "Secret ID", "sss.secret",
817 FT_STRING, BASE_NONE, NULL, 0x0,
821 { "SecretStore Protocol Version", "sss.version", FT_UINT32, BASE_HEX, NULL, 0x0,
825 { "Return Code", "sss.return_code", FT_UINT32, BASE_HEX, VALS(sss_errors_enum), 0x0,
829 { "Encrypted Credential", "sss.enc_cred",
830 FT_BYTES, BASE_NONE, NULL, 0x0,
834 { "Encrypted Data", "sss.enc_data",
835 FT_BYTES, BASE_NONE, NULL, 0x0,
839 { "Enhanced Protection", "ncp.sss_bit1", FT_BOOLEAN, 32, NULL, 0x00000001, NULL, HFILL }},
842 { "Create ID", "ncp.sss_bit2", FT_BOOLEAN, 32, NULL, 0x00000002, NULL, HFILL }},
845 { "Remove Lock", "ncp.sss_bit3", FT_BOOLEAN, 32, NULL, 0x00000004, NULL, HFILL }},
848 { "Repair", "ncp.sss_bit4", FT_BOOLEAN, 32, NULL, 0x00000008, NULL, HFILL }},
851 { "Unicode", "ncp.sss_bit5", FT_BOOLEAN, 32, NULL, 0x00000010, NULL, HFILL }},
854 { "EP Master Password Used", "ncp.sss_bit6", FT_BOOLEAN, 32, NULL, 0x00000020, NULL, HFILL }},
857 { "EP Password Used", "ncp.sss_bit7", FT_BOOLEAN, 32, NULL, 0x00000040, NULL, HFILL }},
860 { "Set Tree Name", "ncp.sss_bit8", FT_BOOLEAN, 32, NULL, 0x00000080, NULL, HFILL }},
863 { "Get Context", "ncp.sss_bit9", FT_BOOLEAN, 32, NULL, 0x00000100, NULL, HFILL }},
866 { "Destroy Context", "ncp.sss_bit10", FT_BOOLEAN, 32, NULL, 0x00000200, NULL, HFILL }},
869 { "Not Defined", "ncp.sss_bit11", FT_BOOLEAN, 32, NULL, 0x00000400, NULL, HFILL }},
872 { "Not Defined", "ncp.sss_bit12", FT_BOOLEAN, 32, NULL, 0x00000800, NULL, HFILL }},
875 { "Not Defined", "ncp.sss_bit13", FT_BOOLEAN, 32, NULL, 0x00001000, NULL, HFILL }},
878 { "Not Defined", "ncp.sss_bit14", FT_BOOLEAN, 32, NULL, 0x00002000, NULL, HFILL }},
881 { "Not Defined", "ncp.sss_bit15", FT_BOOLEAN, 32, NULL, 0x00004000, NULL, HFILL }},
884 { "Not Defined", "ncp.sss_bit16", FT_BOOLEAN, 32, NULL, 0x00008000, NULL, HFILL }},
887 { "EP Lock", "ncp.sss_bit17", FT_BOOLEAN, 32, NULL, 0x00010000, NULL, HFILL }},
890 { "Not Initialized", "ncp.sss_bit18", FT_BOOLEAN, 32, NULL, 0x00020000, NULL, HFILL }},
893 { "Enhanced Protection", "ncp.sss_bit19", FT_BOOLEAN, 32, NULL, 0x00040000, NULL, HFILL }},
896 { "Store Not Synced", "ncp.sss_bit20", FT_BOOLEAN, 32, NULL, 0x00080000, NULL, HFILL }},
899 { "Admin Last Modified", "ncp.sss_bit21", FT_BOOLEAN, 32, NULL, 0x00100000, NULL, HFILL }},
902 { "EP Password Present", "ncp.sss_bit22", FT_BOOLEAN, 32, NULL, 0x00200000, NULL, HFILL }},
905 { "EP Master Password Present", "ncp.sss_bit23", FT_BOOLEAN, 32, NULL, 0x00400000, NULL, HFILL }},
908 { "MP Disabled", "ncp.sss_bit24", FT_BOOLEAN, 32, NULL, 0x00800000, NULL, HFILL }},
911 { "Not Defined", "ncp.sss_bit25", FT_BOOLEAN, 32, NULL, 0x01000000, NULL, HFILL }},
914 { "Not Defined", "ncp.sss_bit26", FT_BOOLEAN, 32, NULL, 0x02000000, NULL, HFILL }},
917 { "Not Defined", "ncp.sss_bit27", FT_BOOLEAN, 32, NULL, 0x04000000, NULL, HFILL }},
920 { "Not Defined", "ncp.sss_bit28", FT_BOOLEAN, 32, NULL, 0x08000000, NULL, HFILL }},
923 { "Not Defined", "ncp.sss_bit29", FT_BOOLEAN, 32, NULL, 0x10000000, NULL, HFILL }},
926 { "Not Defined", "ncp.sss_bit30", FT_BOOLEAN, 32, NULL, 0x20000000, NULL, HFILL }},
929 { "Not Defined", "ncp.sss_bit31", FT_BOOLEAN, 32, NULL, 0x40000000, NULL, HFILL }},
932 { "Not Defined", "ncp.sss_bit32", FT_BOOLEAN, 32, NULL, 0x80000000, NULL, HFILL }},
936 static gint *ett[] = {
939 /*module_t *sss_module;*/
941 proto_sss = proto_register_protocol("Novell SecretStore Services", "SSS", "sss");
942 proto_register_field_array(proto_sss, hf_sss, array_length(hf_sss));
943 proto_register_subtree_array(ett, array_length(ett));