Updates from Greg Morris:

1. Added a number of NCP Error return values.
	2. Added ability to pass byte strings to summary window.
	3. Modified file NCP's to reflect file handle in summary window.
	4. Changed all NCP's using QueueID from big endian to little endian.
	This is different from Novell's NCP documentation but matches same
	information obtained from NDS dissector.
	5. Added over 50 more NDS error return values.
	6. Partially fixed NDS Request verb 6 (Search Entries)

svn path=/trunk/; revision=7172
This commit is contained in:
Guy Harris 2003-02-19 21:47:46 +00:00
parent 91b8a7567f
commit d902039842
2 changed files with 429 additions and 84 deletions

View File

@ -25,7 +25,7 @@ http://developer.novell.com/ndk/doc/ncp/
for a badly-formatted HTML version of the same PDF.
$Id: ncp2222.py,v 1.53 2003/02/11 08:47:22 guy Exp $
$Id: ncp2222.py,v 1.54 2003/02/19 21:47:45 guy Exp $
Copyright (c) 2000-2002 by Gilbert Ramirez <gram@alumni.rice.edu>
@ -5217,7 +5217,7 @@ def define_errors():
errors[0x9804] = "Disk Map Error"
errors[0x9900] = "The file server has run out of directory space on the affected volume"
errors[0x9a00] = "The request attempted to rename the affected file to another volume"
errors[0x9a00] = "Invalid request to rename the affected file to another volume"
errors[0x9b00] = "DirHandle is not associated with a valid directory path"
errors[0x9b01] = "A resulting directory handle is not associated with a valid directory path"
@ -5250,6 +5250,7 @@ def define_errors():
errors[0xa800] = "Invalid Support Module ID"
errors[0xa801] = "No Auditing Access Rights"
errors[0xa802] = "No Access Rights"
errors[0xbe00] = "Invalid Data Stream"
errors[0xbf00] = "Requests for this name space are not valid on this volume"
@ -5301,6 +5302,7 @@ def define_errors():
errors[0xd501] = "No queue job"
errors[0xd502] = "The job associated with JobNumber does not exist in this queue"
errors[0xd503] = "Inspect Failure"
errors[0xd504] = "Unknown NCP Extension Number"
errors[0xd600] = "The file server does not allow unencrypted passwords"
errors[0xd601] = "No job right"
@ -5399,8 +5401,9 @@ def define_errors():
errors[0xfb06] = "Unknown Request"
errors[0xfb07] = "Invalid Subfunction Request"
errors[0xfb08] = "Attempt to use an invalid parameter (drive number, path, or flag value) during a set drive path call"
errors[0xfb09] = "NMAS not installed on this server, NCP NOT Supported"
errors[0xfb09] = "NMAS not running on this server, NCP NOT Supported"
errors[0xfb0a] = "Station Not Logged In"
errors[0xfb0b] = "Secret Store not running on this server, NCP Not supported"
errors[0xfc00] = "The message queue cannot accept another message"
errors[0xfc01] = "The trustee associated with ObjectId does not exist"
@ -5518,6 +5521,7 @@ def produce_code():
#include <epan/conversation.h>
#include "ptvcursor.h"
#include "packet-ncp-int.h"
#include <epan/strutil.h>
/* Function declarations for functions used in proto_register_ncp2222() */
static void ncp_init_protocol(void);
@ -5964,6 +5968,24 @@ static int hf_nds_os_ver = -1;
static int hf_nds_lic_flags = -1;
static int hf_nds_ds_time = -1;
static int hf_nds_ping_version = -1;
static int hf_nds_search_scope = -1;
static int hf_nds_num_objects = -1;
static int hf_bit1siflags = -1;
static int hf_bit2siflags = -1;
static int hf_bit3siflags = -1;
static int hf_bit4siflags = -1;
static int hf_bit5siflags = -1;
static int hf_bit6siflags = -1;
static int hf_bit7siflags = -1;
static int hf_bit8siflags = -1;
static int hf_bit9siflags = -1;
static int hf_bit10siflags = -1;
static int hf_bit11siflags = -1;
static int hf_bit12siflags = -1;
static int hf_bit13siflags = -1;
static int hf_bit14siflags = -1;
static int hf_bit15siflags = -1;
static int hf_bit16siflags = -1;
"""
@ -7617,8 +7639,63 @@ proto_register_ncp2222(void)
{ &hf_nds_ping_version,
{ "Ping Version", "ncp.nds_ping_version", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }},
{ &hf_nds_search_scope,
{ "Search Scope", "ncp.nds_search_scope", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
{ &hf_nds_num_objects,
{ "Number of Objects to Search", "ncp.nds_num_objects", FT_UINT32, BASE_HEX, NULL, 0x0, "", HFILL }},
{ &hf_bit1siflags,
{ "Names", "ncp.bit1siflags", FT_BOOLEAN, 16, NULL, 0x00000001, "", HFILL }},
{ &hf_bit2siflags,
{ "Names and Values", "ncp.bit2siflags", FT_BOOLEAN, 16, NULL, 0x00000002, "", HFILL }},
{ &hf_bit3siflags,
{ "Effective Privileges", "ncp.bit3siflags", FT_BOOLEAN, 16, NULL, 0x00000004, "", HFILL }},
{ &hf_bit4siflags,
{ "Value Info", "ncp.bit4siflags", FT_BOOLEAN, 16, NULL, 0x00000008, "", HFILL }},
{ &hf_bit5siflags,
{ "Abbreviated Value", "ncp.bit5siflags", FT_BOOLEAN, 16, NULL, 0x00000010, "", HFILL }},
{ &hf_bit6siflags,
{ "Not Defined", "ncp.bit6siflags", FT_BOOLEAN, 16, NULL, 0x00000020, "", HFILL }},
{ &hf_bit7siflags,
{ "Not Defined", "ncp.bit7siflags", FT_BOOLEAN, 16, NULL, 0x00000040, "", HFILL }},
{ &hf_bit8siflags,
{ "Not Defined", "ncp.bit8siflags", FT_BOOLEAN, 16, NULL, 0x00000080, "", HFILL }},
{ &hf_bit9siflags,
{ "Expanded Class", "ncp.bit9siflags", FT_BOOLEAN, 16, NULL, 0x00000100, "", HFILL }},
{ &hf_bit10siflags,
{ "Not Defined", "ncp.bit10siflags", FT_BOOLEAN, 16, NULL, 0x00000200, "", HFILL }},
{ &hf_bit11siflags,
{ "Not Defined", "ncp.bit11siflags", FT_BOOLEAN, 16, NULL, 0x00000400, "", HFILL }},
{ &hf_bit12siflags,
{ "Not Defined", "ncp.bit12siflags", FT_BOOLEAN, 16, NULL, 0x00000800, "", HFILL }},
{ &hf_bit13siflags,
{ "Not Defined", "ncp.bit13siflags", FT_BOOLEAN, 16, NULL, 0x00001000, "", HFILL }},
{ &hf_bit14siflags,
{ "Not Defined", "ncp.bit14siflags", FT_BOOLEAN, 16, NULL, 0x00002000, "", HFILL }},
{ &hf_bit15siflags,
{ "Not Defined", "ncp.bit15siflags", FT_BOOLEAN, 16, NULL, 0x00004000, "", HFILL }},
{ &hf_bit16siflags,
{ "Not Defined", "ncp.bit16siflags", FT_BOOLEAN, 16, NULL, 0x00008000, "", HFILL }},
"""
# Print the registration code for the hf variables
for var in sorted_vars:
@ -7990,7 +8067,7 @@ def define_ncp2222():
pkt = NCP(0x1502, "Disable Broadcasts", 'message')
pkt.Request(10)
pkt.Reply(8)
pkt.CompletionCodes([0x0000])
pkt.CompletionCodes([0x0000, 0xfb0a])
# 2222/1503, 21/03
pkt = NCP(0x1503, "Enable Broadcasts", 'message')
@ -9425,7 +9502,7 @@ def define_ncp2222():
rec( -1, (1,255), Path ),
], info_str=(QueueName, "Create Queue: %s", ", %s"))
pkt.Reply(12, [
rec( 8, 4, QueueID, BE ),
rec( 8, 4, QueueID ),
])
pkt.CompletionCodes([0x0000, 0x9600, 0x9900, 0xd000, 0xd100,
0xd200, 0xd300, 0xd400, 0xd500, 0xd601,
@ -9434,7 +9511,7 @@ def define_ncp2222():
# 2222/1765, 23/101
pkt = NCP(0x1765, "Destroy Queue", 'qms')
pkt.Request(14, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
])
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
@ -9443,10 +9520,10 @@ def define_ncp2222():
# 2222/1766, 23/102
pkt = NCP(0x1766, "Read Queue Current Status", 'qms')
pkt.Request(14, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
])
pkt.Reply(20, [
rec( 8, 4, QueueID, BE ),
rec( 8, 4, QueueID ),
rec( 12, 1, QueueStatus ),
rec( 13, 1, CurrentEntries ),
rec( 14, 1, CurrentServers, var="x" ),
@ -9459,7 +9536,7 @@ def define_ncp2222():
# 2222/1767, 23/103
pkt = NCP(0x1767, "Set Queue Current Status", 'qms')
pkt.Request(15, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 1, QueueStatus ),
])
pkt.Reply(8)
@ -9470,7 +9547,7 @@ def define_ncp2222():
# 2222/1768, 23/104
pkt = NCP(0x1768, "Create Queue Job And File", 'qms')
pkt.Request(264, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 250, JobStruct ),
])
pkt.Reply(62, [
@ -9497,7 +9574,7 @@ def define_ncp2222():
# 2222/1769, 23/105
pkt = NCP(0x1769, "Close File And Start Queue Job", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
])
pkt.Reply(8)
@ -9507,7 +9584,7 @@ def define_ncp2222():
# 2222/176A, 23/106
pkt = NCP(0x176A, "Remove Job From Queue", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
])
pkt.Reply(8)
@ -9517,7 +9594,7 @@ def define_ncp2222():
# 2222/176B, 23/107
pkt = NCP(0x176B, "Get Queue Job List", 'qms')
pkt.Request(14, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
])
pkt.Reply(12, [
rec( 8, 2, JobCount, BE, var="x" ),
@ -9529,7 +9606,7 @@ def define_ncp2222():
# 2222/176C, 23/108
pkt = NCP(0x176C, "Read Queue Job Entry", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
])
pkt.Reply(258, [
@ -9550,7 +9627,7 @@ def define_ncp2222():
# 2222/176E, 23/110
pkt = NCP(0x176E, "Change Queue Job Position", 'qms')
pkt.Request(17, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
rec( 16, 1, NewPosition ),
])
@ -9560,7 +9637,7 @@ def define_ncp2222():
# 2222/176F, 23/111
pkt = NCP(0x176F, "Attach Queue Server To Queue", 'qms')
pkt.Request(14, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
])
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
@ -9570,7 +9647,7 @@ def define_ncp2222():
# 2222/1770, 23/112
pkt = NCP(0x1770, "Detach Queue Server From Queue", 'qms')
pkt.Request(14, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
])
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x9900, 0xd000, 0xd100, 0xd200,
@ -9579,7 +9656,7 @@ def define_ncp2222():
# 2222/1771, 23/113
pkt = NCP(0x1771, "Service Queue Job", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, ServiceType, BE ),
])
pkt.Reply(62, [
@ -9605,7 +9682,7 @@ def define_ncp2222():
# 2222/1772, 23/114
pkt = NCP(0x1772, "Finish Servicing Queue Job", 'qms')
pkt.Request(20, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
rec( 16, 4, ChargeInformation, BE ),
])
@ -9616,7 +9693,7 @@ def define_ncp2222():
# 2222/1773, 23/115
pkt = NCP(0x1773, "Abort Servicing Queue Job", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
])
pkt.Reply(8)
@ -9626,7 +9703,7 @@ def define_ncp2222():
# 2222/1774, 23/116
pkt = NCP(0x1774, "Change To Client Rights", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
])
pkt.Reply(8)
@ -9643,7 +9720,7 @@ def define_ncp2222():
# 2222/1776, 23/118
pkt = NCP(0x1776, "Read Queue Server Current Status", 'qms')
pkt.Request(19, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, ServerID, BE ),
rec( 18, 1, ServerStation ),
])
@ -9656,7 +9733,7 @@ def define_ncp2222():
# 2222/1777, 23/119
pkt = NCP(0x1777, "Set Queue Server Current Status", 'qms')
pkt.Request(78, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 64, ServerStatusRecord ),
])
pkt.Reply(8)
@ -9666,11 +9743,11 @@ def define_ncp2222():
# 2222/1778, 23/120
pkt = NCP(0x1778, "Get Queue Job File Size", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, JobNumber, BE ),
])
pkt.Reply(20, [
rec( 8, 4, QueueID, BE ),
rec( 8, 4, QueueID ),
rec( 12, 4, JobNumberLong ),
rec( 16, 4, FileSize, BE ),
])
@ -9680,7 +9757,7 @@ def define_ncp2222():
# 2222/1779, 23/121
pkt = NCP(0x1779, "Create Queue Job And File", 'qms')
pkt.Request(264, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 250, JobStruct ),
])
pkt.Reply(94, [
@ -9692,7 +9769,7 @@ def define_ncp2222():
# 2222/177A, 23/122
pkt = NCP(0x177A, "Read Queue Job Entry", 'qms')
pkt.Request(18, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
])
pkt.Reply(258, [
@ -9704,7 +9781,7 @@ def define_ncp2222():
# 2222/177B, 23/123
pkt = NCP(0x177B, "Change Queue Job Entry", 'qms')
pkt.Request(264, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 250, JobStruct ),
])
pkt.Reply(8)
@ -9714,7 +9791,7 @@ def define_ncp2222():
# 2222/177C, 23/124
pkt = NCP(0x177C, "Service Queue Job", 'qms')
pkt.Request(16, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 2, ServiceType ),
])
pkt.Reply(94, [
@ -9726,10 +9803,10 @@ def define_ncp2222():
# 2222/177D, 23/125
pkt = NCP(0x177D, "Read Queue Current Status", 'qms')
pkt.Request(14, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
])
pkt.Reply(32, [
rec( 8, 4, QueueID, BE ),
rec( 8, 4, QueueID ),
rec( 12, 1, QueueStatus ),
rec( 13, 3, Reserved3 ),
rec( 16, 4, CurrentEntries ),
@ -9743,7 +9820,7 @@ def define_ncp2222():
# 2222/177E, 23/126
pkt = NCP(0x177E, "Set Queue Current Status", 'qms')
pkt.Request(15, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 1, QueueStatus ),
])
pkt.Reply(8)
@ -9753,7 +9830,7 @@ def define_ncp2222():
# 2222/177F, 23/127
pkt = NCP(0x177F, "Close File And Start Queue Job", 'qms')
pkt.Request(18, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
])
pkt.Reply(8)
@ -9763,7 +9840,7 @@ def define_ncp2222():
# 2222/1780, 23/128
pkt = NCP(0x1780, "Remove Job From Queue", 'qms')
pkt.Request(18, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
])
pkt.Reply(8)
@ -9773,7 +9850,7 @@ def define_ncp2222():
# 2222/1781, 23/129
pkt = NCP(0x1781, "Get Queue Job List", 'qms')
pkt.Request(18, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
])
pkt.Reply(20, [
@ -9787,7 +9864,7 @@ def define_ncp2222():
# 2222/1782, 23/130
pkt = NCP(0x1782, "Change Job Priority", 'qms')
pkt.Request(22, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
rec( 18, 4, Priority ),
])
@ -9798,7 +9875,7 @@ def define_ncp2222():
# 2222/1783, 23/131
pkt = NCP(0x1783, "Finish Servicing Queue Job", 'qms')
pkt.Request(22, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
rec( 18, 4, ChargeInformation ),
])
@ -9809,7 +9886,7 @@ def define_ncp2222():
# 2222/1784, 23/132
pkt = NCP(0x1784, "Abort Servicing Queue Job", 'qms')
pkt.Request(18, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
])
pkt.Reply(8)
@ -9819,7 +9896,7 @@ def define_ncp2222():
# 2222/1785, 23/133
pkt = NCP(0x1785, "Change To Client Rights", 'qms')
pkt.Request(18, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
])
pkt.Reply(8)
@ -9829,7 +9906,7 @@ def define_ncp2222():
# 2222/1786, 23/134
pkt = NCP(0x1786, "Read Queue Server Current Status", 'qms')
pkt.Request(22, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, ServerID, BE ),
rec( 18, 4, ServerStation ),
])
@ -9842,11 +9919,11 @@ def define_ncp2222():
# 2222/1787, 23/135
pkt = NCP(0x1787, "Get Queue Job File Size", 'qms')
pkt.Request(18, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
])
pkt.Reply(20, [
rec( 8, 4, QueueID, BE ),
rec( 8, 4, QueueID ),
rec( 12, 4, JobNumberLong ),
rec( 16, 4, FileSize, BE ),
])
@ -9856,9 +9933,9 @@ def define_ncp2222():
# 2222/1788, 23/136
pkt = NCP(0x1788, "Move Queue Job From Src Q to Dst Q", 'qms')
pkt.Request(22, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, JobNumberLong ),
rec( 18, 4, DstQueueID, BE ),
rec( 18, 4, DstQueueID ),
])
pkt.Reply(12, [
rec( 8, 4, JobNumberLong ),
@ -9867,7 +9944,7 @@ def define_ncp2222():
# 2222/1789, 23/137
pkt = NCP(0x1789, "Get Queue Jobs From Form List", 'qms')
pkt.Request(24, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, QueueStartPosition ),
rec( 18, 4, FormTypeCnt, var="x" ),
rec( 22, 2, FormType, repeat="x" ),
@ -9881,7 +9958,7 @@ def define_ncp2222():
# 2222/178A, 23/138
pkt = NCP(0x178A, "Service Queue Job By Form List", 'qms')
pkt.Request(24, [
rec( 10, 4, QueueID, BE ),
rec( 10, 4, QueueID ),
rec( 14, 4, QueueStartPosition ),
rec( 18, 4, FormTypeCnt, var= "x" ),
rec( 22, 2, FormType, repeat="x" ),
@ -11223,13 +11300,13 @@ def define_ncp2222():
pkt.Reply(8)
# The following value is Unicode
#[ 8, (1, 255), ReplyBuffer ],
pkt.CompletionCodes([0x0000, 0xee00, 0xfe00])
pkt.CompletionCodes([0x0000, 0xd504, 0xee00, 0xfe00])
# 2222/3B, 59
pkt = NCP(0x3B, "Commit File", 'file', has_length=0 )
pkt.Request(14, [
rec( 7, 1, Reserved ),
rec( 8, 6, FileHandle ),
])
], info_str=(FileHandle, "Commit File - 0x%s", ", %s"))
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x8800, 0x9804, 0xff00])
# 2222/3E, 62
@ -11318,7 +11395,7 @@ def define_ncp2222():
pkt.Request(14, [
rec( 7, 1, Reserved ),
rec( 8, 6, FileHandle ),
])
], info_str=(FileHandle, "Close File - 0x%s", ", %s"))
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x8800, 0xff1a])
# 2222/43, 67
@ -11383,9 +11460,10 @@ def define_ncp2222():
0xff16])
# 2222/47, 71
pkt = NCP(0x47, "Get Current Size of File", 'file')
pkt.Request(13, [
rec( 7, 6, FileHandle ),
])
pkt.Request(14, [
rec(7, 1, Reserved ),
rec( 8, 6, FileHandle ),
], info_str=(FileHandle, "Get Current Size of File - 0x%s", ", %s"))
pkt.Reply(12, [
rec( 8, 4, FileSize, BE ),
])
@ -11396,12 +11474,12 @@ def define_ncp2222():
rec( 7, 1, Reserved ),
rec( 8, 6, FileHandle ),
rec( 14, 4, FileOffset, BE ),
rec( 18, 2, MaxBytes, BE ),
])
rec( 18, 2, MaxBytes, BE ),
], info_str=(FileHandle, "Read From File - 0x%s", ", %s"))
pkt.Reply(10, [
rec( 8, 2, NumBytes, BE ),
])
pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0xff00])
pkt.CompletionCodes([0x0000, 0x8300, 0x8800, 0x9300, 0xff1b])
# 2222/49, 73
pkt = NCP(0x49, "Write to a File", 'file')
pkt.Request(20, [
@ -11409,7 +11487,7 @@ def define_ncp2222():
rec( 8, 6, FileHandle ),
rec( 14, 4, FileOffset, BE ),
rec( 18, 2, MaxBytes, BE ),
])
], info_str=(FileHandle, "Write to a File - 0x%s", ", %s"))
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x0104, 0x8300, 0x8800, 0x9400, 0x9500, 0xa201, 0xff1b])
# 2222/4A, 74
@ -11434,7 +11512,7 @@ def define_ncp2222():
rec( 8, 6, FileHandle ),
rec( 14, 2, FileTime, BE ),
rec( 16, 2, FileDate, BE ),
])
], info_str=(FileHandle, "Set Time and Date Stamp for File - 0x%s", ", %s"))
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x8800, 0x9600])
# 2222/4C, 76
@ -11524,7 +11602,7 @@ def define_ncp2222():
pkt.Request(17, [
rec( 7, 6, FileHandle ),
rec( 13, 4, FileOffset ),
])
], info_str=(FileHandle, "Get Sparse File Data Block Bitmap for File - 0x%s", ", %s"))
pkt.Reply(528, [
rec( 8, 4, AllocationBlockSize ),
rec( 12, 4, Reserved4 ),
@ -11684,7 +11762,7 @@ def define_ncp2222():
pkt.ReqCondSizeVariable()
pkt.CompletionCodes([0x0000, 0x8001, 0x8101, 0x8401, 0x8501,
0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
0x9804, 0x9b03, 0x9c03, 0xa500, 0xbf00, 0xfd00, 0xff16])
0x9804, 0x9b03, 0x9c03, 0xa500, 0xa802, 0xbf00, 0xfd00, 0xff16])
# 2222/5702, 87/02
pkt = NCP(0x5702, "Initialize Search", 'file', has_length=0)
pkt.Request( (18,272), [
@ -11790,7 +11868,7 @@ def define_ncp2222():
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
0x8701, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9200, 0x9600,
0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
0x9804, 0x9a00, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
# 2222/5705, 87/05
pkt = NCP(0x5705, "Scan File or Subdirectory for Trustees", 'file', has_length=0)
pkt.Request((24, 278), [
@ -11878,7 +11956,7 @@ def define_ncp2222():
pkt.ReqCondSizeVariable()
pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
0x8701, 0x8900, 0x8d00, 0x8f00, 0x9001, 0x9600,
0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
0x9804, 0x9b03, 0x9c03, 0xa802, 0xbf00, 0xfd00, 0xff16])
# 2222/5707, 87/07
pkt = NCP(0x5707, "Modify File or Subdirectory DOS Information", 'file', has_length=0)
pkt.Request((62,316), [
@ -11911,7 +11989,7 @@ def define_ncp2222():
], info_str=(Path, "Modify DOS Information for: %s", "/%s"))
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
0x8701, 0x8c01, 0x8d00, 0x8f00, 0x9001, 0x9600,
0x8701, 0x8c01, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
# 2222/5708, 87/08
pkt = NCP(0x5708, "Delete a File or Subdirectory", 'file', has_length=0)
@ -11927,7 +12005,7 @@ def define_ncp2222():
], info_str=(Path, "Delete: %s", "/%s"))
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x8000, 0x8101, 0x8401, 0x8501,
0x8701, 0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
0x8701, 0x8900, 0x8a00, 0x8d00, 0x8e00, 0x8f00, 0x9001, 0x9600,
0x9804, 0x9b03, 0x9c03, 0xbf00, 0xfd00, 0xff16])
# 2222/5709, 87/09
pkt = NCP(0x5709, "Set Short Directory Handle", 'file', has_length=0)
@ -13206,17 +13284,24 @@ def define_ncp2222():
pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
# 2222/5C, 91
pkt = NCP(0x5B, "NMAS Graded Authentication", 'comm')
#Need info on this packet structure
pkt.Request(7)
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
# 2222/5C, 92
pkt = NCP(0x5C, "SecretStore Services", 'file')
#Need info on this packet structure and SecretStore Verbs
pkt.Request(7)
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0x7e01, 0x8000, 0x8101, 0x8401, 0x8501,
0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600,
0x8701, 0x8800, 0x8d00, 0x8f00, 0x9001, 0x9600, 0xfb0b,
0x9804, 0x9b03, 0x9c03, 0xa800, 0xfd00, 0xff16])
# 2222/5E, 94
pkt = NCP(0x5e, "NMAS Communications Packet", 'comm')
pkt = NCP(0x5E, "NMAS Communications Packet", 'comm')
pkt.Request(7)
pkt.Reply(8)
pkt.CompletionCodes([0x0000, 0xfb09])
@ -13245,15 +13330,15 @@ def define_ncp2222():
# 2222/65, 101
pkt = NCP(0x65, "Packet Burst Connection Request", 'comm')
pkt.Request(25, [
rec( 7, 4, LocalConnectionID ),
rec( 11, 4, LocalMaxPacketSize ),
rec( 15, 2, LocalTargetSocket ),
rec( 17, 4, LocalMaxSendSize ),
rec( 21, 4, LocalMaxRecvSize ),
rec( 7, 4, LocalConnectionID, BE ),
rec( 11, 4, LocalMaxPacketSize, BE ),
rec( 15, 2, LocalTargetSocket, BE ),
rec( 17, 4, LocalMaxSendSize, BE ),
rec( 21, 4, LocalMaxRecvSize, BE ),
])
pkt.Reply(16, [
rec( 8, 4, RemoteTargetID ),
rec( 12, 4, RemoteMaxPacketSize ),
rec( 8, 4, RemoteTargetID, BE ),
rec( 12, 4, RemoteMaxPacketSize, BE ),
])
pkt.CompletionCodes([0x0000])
# 2222/66, 102

View File

@ -8,7 +8,7 @@
* Gilbert Ramirez <gram@alumni.rice.edu>
* Modified to decode NDS packets by Greg Morris <gmorris@novell.com>
*
* $Id: packet-ncp2222.inc,v 1.50 2003/02/08 03:06:06 guy Exp $
* $Id: packet-ncp2222.inc,v 1.51 2003/02/19 21:47:46 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -177,6 +177,14 @@ static const value_string class_def_type[] = {
{ 0, NULL }
};
static const value_string nds_search_scope[] = {
{ 0x0000, "Examine the base object only" },
{ 0x0001, "Search the immediate subordinates of the base object" },
{ 0x0002, "Search the base object and all its subordinates" },
{ 0x0003, "Search the base objects and all objects in its partition (Implemented in NDS 8)" },
{ 0, NULL }
};
static const value_string nds_reply_errors[] = {
{ 0xffffffff, "(-1) Insufficient Space" },
{ 0xffffff89, "(-119) Buffer too Small" },
@ -495,7 +503,7 @@ static const value_string nds_reply_errors[] = {
{ 0xfffffd0d, "(-755) Invalid Synchronization Data" },
{ 0xfffffd0c, "(-756) Stream Exists" },
{ 0xfffffd0b, "(-757) Auxiliary Has Containment" },
{ 0xfffffd0a, "(-758) Auxiliary Not Containere" },
{ 0xfffffd0a, "(-758) Auxiliary Not Container" },
{ 0xfffffd09, "(-759) Auxiliary Not Effective" },
{ 0xfffffd08, "(-760) Auxiliary On Alias" },
{ 0xfffffd07, "(-761) Have Seen State" },
@ -513,6 +521,60 @@ static const value_string nds_reply_errors[] = {
{ 0xfffffcfb, "(-773) Iterator Syntax" },
{ 0xfffffcfa, "(-774) Repairing DIB" },
{ 0xfffffcf9, "(-775) Invalid OID Format" },
{ 0xfffffcf8, "(-776) Attempted to perform an NDS operation, and the DS agent on this server is closing" },
{ 0xfffffcf7, "(-777) Attempted to modify an object's attribute that is not stored on the sparse replica" },
{ 0xfffffcf6, "(-778) VpVector and VpvUser which must be correlated, are out of sync" },
{ 0xfffffcf5, "(-779) Error Cannot Go Remote" },
{ 0xfffffcf4, "(-780) Request not Supported" },
{ 0xfffffcf3, "(-781) Entry Not Local" },
{ 0xfffffcf2, "(-782) Root Unreachable" },
{ 0xfffffcf1, "(-783) VRDIM Not Initialized" },
{ 0xfffffcf0, "(-784) Wait Timeout" },
{ 0xfffffcef, "(-785) DIB Error" },
{ 0xfffffcee, "(-786) DIB IO Failure" },
{ 0xfffffced, "(-787) Illegal Schema Attribute" },
{ 0xfffffcec, "(-788) Error Schema Partition" },
{ 0xfffffceb, "(-789) Invalid Template" },
{ 0xfffffcea, "(-790) Error Opening File" },
{ 0xfffffce9, "(-791) Error Direct Opening File" },
{ 0xfffffce8, "(-792) Error Creating File" },
{ 0xfffffce7, "(-793) Error Direct Creating File" },
{ 0xfffffce6, "(-794) Error Reading File" },
{ 0xfffffce5, "(-795) Error Direct Reading File" },
{ 0xfffffce4, "(-796) Error Writing File" },
{ 0xfffffce3, "(-797) Error Direct Writing File" },
{ 0xfffffce2, "(-798) Error Positioning in File" },
{ 0xfffffce1, "(-799) Error Getting File Size" },
{ 0xffffe88f, "(-6001) Error Truncating File" },
{ 0xffffe88e, "(-6002) Error Parsing File Name" },
{ 0xffffe88d, "(-6003) Error Closing File" },
{ 0xffffe88c, "(-6004) Error Getting File Info" },
{ 0xffffe88b, "(-6005) Error Expanding File" },
{ 0xffffe88a, "(-6006) Error Getting Free Blocks" },
{ 0xffffe889, "(-6007) Error Checking File Existence" },
{ 0xffffe888, "(-6008) Error Deleting File" },
{ 0xffffe887, "(-6009) Error Renaming File" },
{ 0xffffe886, "(-6010) Error Initializing IO System" },
{ 0xffffe885, "(-6011) Error Flushing File" },
{ 0xffffe884, "(-6012) Error Setting Up for Read" },
{ 0xffffe883, "(-6013) Error Setting up for Write" },
{ 0xffffe882, "(-6014) Error Old View" },
{ 0xffffe881, "(-6015) Server in Skulk" },
{ 0xffffe880, "(-6016) Error Returning Partial Results" },
{ 0xffffe87f, "(-6017) No Such Schema" },
{ 0xffffe87e, "(-6018) Serial Number Mismatch" },
{ 0xffffe87d, "(-6019) Bad Referal Database Serial Number" },
{ 0xffffe87c, "(-6020) Bad Referal Serial Number" },
{ 0xffffe87b, "(-6021) Invalid File Sequence" },
{ 0xffffe87a, "(-6022) Error Referal Trans Gap" },
{ 0xffffe879, "(-6023) Bad Referal File Number" },
{ 0xffffe878, "(-6024) Referal File Not Found" },
{ 0xffffe877, "(-6025) Error Backup Active" },
{ 0xffffe876, "(-6026) Referal Device Full" },
{ 0xffffe875, "(-6027) Unsupported Version" },
{ 0xffffe874, "(-6028) Error Must Wait Checkpoint" },
{ 0xffffe873, "(-6029) Attribute Maintenance in Progress" },
{ 0xffffe872, "(-6030) Error Abort Transaction" },
{ 0xffff0000, "Ok" },
{ 0x0000, "Ok" },
{ 0, NULL }
@ -1429,14 +1491,14 @@ get_info_type(const gchar* check_string)
for (i = 0 ; i < length-1 ; i++ ) {
char_val = check_string[i+1];
if (check_string[i] == 0x25 && check_string[i+1] == 0x64) {
if (check_string[i] == 0x25 && check_string[i+1] == 0x64) { /* %d Digits*/
return 0;
}
if ( check_string[i] == 0x25 && check_string[i+1] == 0x78) {
if ( check_string[i] == 0x78 && check_string[i+1] == 0x25 && check_string[i+2] == 0x73) { /* x%s Bytes*/
return 1;
}
}
return 2;
return 2; /* Normal String */
}
static void
@ -1741,6 +1803,10 @@ print_nds_values(proto_tree *vtree, tvbuff_t *tvb, guint32 syntax_type, nds_val
proto_tree_add_ipv4(nvtree, hf_add_ref_tcp, tvb, voffset+2, 4, value4);
break;
case 0x00000001:
proto_tree_add_item(nvtree, hf_nds_port, tvb, voffset, 2, FALSE);
value4 = tvb_get_letohl(tvb, voffset+2);
proto_tree_add_ipv4(nvtree, hf_add_ref_ip, tvb, voffset+2, 4, value4);
break;
case 0x0000000d:
get_string(tvb, voffset, value3, vvalues->vstring);
proto_tree_add_string(nvtree, hf_value_string, tvb, voffset,
@ -4188,6 +4254,7 @@ dissect_ncp_request(tvbuff_t *tvb, packet_info *pinfo,
/* Construct the info string if necessary */
if (run_info_str) {
GPtrArray *parray;
char* byte_string;
int i, len;
field_info *finfo;
int info_type;
@ -4204,11 +4271,21 @@ dissect_ncp_request(tvbuff_t *tvb, packet_info *pinfo,
info_type = get_info_type((const gchar*) ncp_rec->req_info_str->first_string);
if (info_type == 2) { /* Is this a string or not? */
if (info_type != 0) { /* Is this a string or not? */
if (info_type == 1) { /* Is this bytes? */
byte_string = bytes_to_str(fvalue_get(finfo->value), fvalue_length(finfo->value));
col_append_fstr(pinfo->cinfo, COL_INFO,
(const gchar*) ncp_rec->req_info_str->first_string,
byte_string);
}
else
{
col_append_fstr(pinfo->cinfo, COL_INFO,
(const gchar*) ncp_rec->req_info_str->first_string,
fvalue_get(finfo->value));
}
}
else
{
@ -4223,11 +4300,21 @@ dissect_ncp_request(tvbuff_t *tvb, packet_info *pinfo,
finfo = g_ptr_array_index(parray, i);
info_type = get_info_type((const gchar*) ncp_rec->req_info_str->repeat_string);
if (info_type == 2) { /* Is this a string or not? */
if (info_type != 0) { /* Is this a string or not? */
if (info_type == 1)
{ /* Is this bytes? */
byte_string = bytes_to_str(fvalue_get(finfo->value), fvalue_length(finfo->value));
col_append_fstr(pinfo->cinfo, COL_INFO,
(const gchar*) ncp_rec->req_info_str->repeat_string,
byte_string);
}
else
{
col_append_fstr(pinfo->cinfo, COL_INFO,
(const gchar*) ncp_rec->req_info_str->repeat_string,
fvalue_get(finfo->value));
}
}
else
{
@ -6467,7 +6554,180 @@ dissect_nds_request(tvbuff_t *tvb, packet_info *pinfo,
break;
case 0x06:
verb_string = "Search Entries";
pvalues[0].vtype = VTYPE_NONE; /* Not Defined */
pvalues[0].vvalue = tvb_get_letohl(tvb, foffset);
pvalues[0].vstring = "";
pvalues[0].vtype = VTYPE_UINT32;
pvalues[0].vdesc = "Version: %u";
pvalues[0].vlength = 4;
pvalues[0].voffset = foffset;
pvalues[0].hfname= hf_nds_ver;
foffset = foffset+pvalues[0].vlength;
pvalues[1].vvalue = tvb_get_letohl(tvb, foffset);
pvalues[1].vtype = VTYPE_UINT32;
pvalues[1].vstring = "";
pvalues[1].vdesc = "Request Flags: 0x%08x";
pvalues[1].vlength = 4;
pvalues[1].hfname= hf_nds_rflags;
pvalues[1].voffset = foffset;
foffset = foffset+4;
pvalues[2].vvalue = tvb_get_letohl(tvb, foffset);
pvalues[2].vtype = VTYPE_UINT32;
pvalues[2].vdesc = "Iteration Handle: 0x%08x";
pvalues[2].vlength = 4;
pvalues[2].voffset = foffset;
pvalues[2].hfname= hf_nds_iteration;
foffset = foffset+pvalues[2].vlength;
pvalues[3].vvalue = tvb_get_letohl(tvb, foffset);
pvalues[3].vstring = "";
pvalues[3].vtype = VTYPE_UINT32;
pvalues[3].vdesc = "Base Entry ID: 0x%08x";
pvalues[3].vlength = 4;
resolve_eid = FALSE;
global_eid = pvalues[3].vvalue;
pvalues[3].voffset = foffset;
pvalues[3].hfname= hf_nds_eid;
foffset = foffset+pvalues[3].vlength;
pvalues[4].vvalue = tvb_get_letohl(tvb, foffset);
pvalues[4].vstring = match_strval(pvalues[4].vvalue, nds_search_scope);
if(pvalues[4].vstring == NULL)
{
pvalues[4].vstring = "No Search Scope Defined";
}
pvalues[4].vtype = VTYPE_STRING;
pvalues[4].vdesc = "Replica Type: %s";
pvalues[4].vlength = 4;
pvalues[4].voffset = foffset;
pvalues[4].mvtype = 0;
pvalues[4].hfname= hf_nds_search_scope;
foffset = foffset + pvalues[4].vlength;
pvalues[5].vvalue = tvb_get_letohl(tvb, foffset);
pvalues[5].vtype = VTYPE_UINT32;
pvalues[5].vdesc = "Number of Objects to Search: 0x%08x";
pvalues[5].vlength = 4;
pvalues[5].voffset = foffset;
pvalues[5].hfname= hf_nds_num_objects;
foffset = foffset+pvalues[5].vlength;
pvalues[6].vvalue = tvb_get_letohl(tvb, foffset);
pvalues[6].vtype = VTYPE_BITFIELD;
pvalues[6].vdesc = "Information Types:";
pvalues[6].vlength = 2;
pvalues[6].hfname= hf_nds_nflags;
pvalues[6].voffset = foffset;
pvalues[6].bit1 = "Names";
pvalues[6].bit1hfname = hf_bit1siflags;
pvalues[6].bit2 = "Names and Values";
pvalues[6].bit2hfname = hf_bit2siflags;
pvalues[6].bit3 = "Effective Privileges";
pvalues[6].bit3hfname = hf_bit3siflags;
pvalues[6].bit4 = "Value Info";
pvalues[6].bit4hfname = hf_bit4siflags;
pvalues[6].bit5 = "Abbreviated Value";
pvalues[6].bit5hfname = hf_bit5siflags;
pvalues[6].bit6 = "Not Defined";
pvalues[6].bit6hfname = hf_bit6siflags;
pvalues[6].bit7 = "Not Defined";
pvalues[6].bit7hfname = hf_bit7siflags;
pvalues[6].bit8 = "Not Defined";
pvalues[6].bit8hfname = hf_bit8siflags;
pvalues[6].bit9 = "Expanded Class";
pvalues[6].bit9hfname = hf_bit9siflags;
pvalues[6].bit10 = "Not Defined";
pvalues[6].bit10hfname = hf_bit10siflags;
pvalues[6].bit11= "Not Defined";
pvalues[6].bit11hfname = hf_bit11siflags;
pvalues[6].bit12 = "Not Defined";
pvalues[6].bit12hfname = hf_bit12siflags;
pvalues[6].bit13 = "Not Defined";
pvalues[6].bit13hfname = hf_bit13siflags;
pvalues[6].bit14 = "Not Defined";
pvalues[6].bit14hfname = hf_bit14siflags;
pvalues[6].bit15 = "Not Defined";
pvalues[6].bit15hfname = hf_bit15siflags;
pvalues[6].bit16 = "Not Defined";
pvalues[6].bit16hfname = hf_bit16siflags;
foffset = foffset+4;
if(pvalues[0].vvalue != 2)
{
pvalues[7].vvalue = tvb_get_letohs(tvb, foffset);
global_flags = tvb_get_letohl(tvb, foffset);
pvalues[7].vtype = VTYPE_BITFIELD;
pvalues[7].vdesc = "Information Flags (low) Byte:";
pvalues[7].vlength = 2;
pvalues[7].hfname= hf_nds_rflags;
pvalues[7].voffset = foffset;
pvalues[7].bit1 = "Output Flags";
pvalues[7].bit1hfname = hf_bit1infoflagsl;
pvalues[7].bit2 = "Entry ID";
pvalues[7].bit2hfname = hf_bit2infoflagsl;
pvalues[7].bit3 = "Entry Flags";
pvalues[7].bit3hfname = hf_bit3infoflagsl;
pvalues[7].bit4 = "Subordinate Count";
pvalues[7].bit4hfname = hf_bit4infoflagsl;
pvalues[7].bit5 = "Modification Time";
pvalues[7].bit5hfname = hf_bit5infoflagsl;
pvalues[7].bit6 = "Modification Timestamp";
pvalues[7].bit6hfname = hf_bit6infoflagsl;
pvalues[7].bit7 = "Creation Timestamp";
pvalues[7].bit7hfname = hf_bit7infoflagsl;
pvalues[7].bit8 = "Partition Root ID";
pvalues[7].bit8hfname = hf_bit8infoflagsl;
pvalues[7].bit9 = "Parent ID";
pvalues[7].bit9hfname = hf_bit9infoflagsl;
pvalues[7].bit10 = "Revision Count";
pvalues[7].bit10hfname = hf_bit10infoflagsl;
pvalues[7].bit11 = "Replica Type";
pvalues[7].bit11hfname = hf_bit11infoflagsl;
pvalues[7].bit12 = "Base Class";
pvalues[7].bit12hfname = hf_bit12infoflagsl;
pvalues[7].bit13 = "Relative Distinguished Name";
pvalues[7].bit13hfname = hf_bit13infoflagsl;
pvalues[7].bit14 = "Distinguished Name";
pvalues[7].bit14hfname = hf_bit14infoflagsl;
pvalues[7].bit15 = "Root Distinguished Name";
pvalues[7].bit15hfname = hf_bit15infoflagsl;
pvalues[7].bit16 = "Parent Distinguished Name";
pvalues[7].bit16hfname = hf_bit16infoflagsl;
foffset = foffset+2;
pvalues[8].vvalue = tvb_get_letohs(tvb, foffset);
pvalues[8].vtype = VTYPE_BITFIELD;
pvalues[8].vdesc = "Information Flags (high) Byte:";
pvalues[8].vlength = 2;
pvalues[8].hfname= hf_nds_rflags;
pvalues[8].voffset = foffset;
pvalues[8].bit1 = "Purge Time";
pvalues[8].bit1hfname = hf_bit1infoflagsh;
pvalues[8].bit2 = "Dereference Base Class";
pvalues[8].bit2hfname = hf_bit2infoflagsh;
pvalues[8].bit3 = "Not Defined";
pvalues[8].bit3hfname = hf_bit3infoflagsh;
pvalues[8].bit4 = "Not Defined";
pvalues[8].bit4hfname = hf_bit4infoflagsh;
pvalues[8].bit5 = "Not Defined";
pvalues[8].bit5hfname = hf_bit5infoflagsh;
pvalues[8].bit6 = "Not Defined";
pvalues[8].bit6hfname = hf_bit6infoflagsh;
pvalues[8].bit7 = "Not Defined";
pvalues[8].bit7hfname = hf_bit7infoflagsh;
pvalues[8].bit8 = "Not Defined";
pvalues[8].bit8hfname = hf_bit8infoflagsh;
pvalues[8].bit9 = "Not Defined";
pvalues[8].bit9hfname = hf_bit9infoflagsh;
pvalues[8].bit10 = "Not Defined";
pvalues[8].bit10hfname = hf_bit10infoflagsh;
pvalues[8].bit11 = "Not Defined";
pvalues[8].bit11hfname = hf_bit11infoflagsh;
pvalues[8].bit12 = "Not Defined";
pvalues[8].bit12hfname = hf_bit12infoflagsh;
pvalues[8].bit13 = "Not Defined";
pvalues[8].bit13hfname = hf_bit13infoflagsh;
pvalues[8].bit14 = "Not Defined";
pvalues[8].bit14hfname = hf_bit14infoflagsh;
pvalues[8].bit15 = "Not Defined";
pvalues[8].bit15hfname = hf_bit15infoflagsh;
pvalues[8].bit16 = "Not Defined";
pvalues[8].bit16hfname = hf_bit16infoflagsh;
foffset = foffset+2;
}
break;
case 0x07:
verb_string = "Add Entry ->";