#include <stdio.h> not needed.
[obnox/wireshark/wip.git] / epan / dissectors / packet-dop.c
index cb771848917d454f431cd2e92dedd483d4909cbc..d8c9248025935d086dd91340cb344ddff6923921 100644 (file)
 #include <glib.h>
 #include <epan/packet.h>
 #include <epan/prefs.h>
-#include <epan/conversation.h>
 #include <epan/oids.h>
 #include <epan/asn1.h>
 #include <epan/expert.h>
 
-#include <stdio.h>
 #include <string.h>
 
 #include "packet-ber.h"
 #define PFNAME "dop"
 
 static guint global_dop_tcp_port = 102;
-static guint tcp_port = 0;
-static dissector_handle_t tpkt_handle = NULL;
-void prefs_register_dop(void); /* forwad declaration for use in preferences registration */
+static dissector_handle_t tpkt_handle;
+void prefs_register_dop(void); /* forward declaration for use in preferences registration */
 
 /* Initialize the protocol and registered fields */
-int proto_dop = -1;
+static int proto_dop = -1;
 
 static struct SESSION_DATA_STRUCTURE* session = NULL;
 static const char *binding_type = NULL; /* binding_type */
@@ -243,6 +240,8 @@ static int hf_dop_DSEType_rhob = -1;
 static int hf_dop_DSEType_sa = -1;
 static int hf_dop_DSEType_dsSubentry = -1;
 static int hf_dop_DSEType_familyMember = -1;
+static int hf_dop_DSEType_ditBridge = -1;
+static int hf_dop_DSEType_writeableCopy = -1;
 static int hf_dop_GrantsAndDenials_grantAdd = -1;
 static int hf_dop_GrantsAndDenials_denyAdd = -1;
 static int hf_dop_GrantsAndDenials_grantDiscloseOnError = -1;
@@ -271,7 +270,7 @@ static int hf_dop_GrantsAndDenials_grantInvoke = -1;
 static int hf_dop_GrantsAndDenials_denyInvoke = -1;
 
 /*--- End of included file: packet-dop-hf.c ---*/
-#line 73 "packet-dop-template.c"
+#line 70 "packet-dop-template.c"
 
 /* Initialize the subtree pointers */
 static gint ett_dop = -1;
@@ -348,7 +347,7 @@ static gint ett_dop_T_basicLevels = -1;
 static gint ett_dop_GrantsAndDenials = -1;
 
 /*--- End of included file: packet-dop-ett.c ---*/
-#line 78 "packet-dop-template.c"
+#line 75 "packet-dop-template.c"
 
 /* Dissector table */
 static dissector_table_t dop_dissector_table;
@@ -357,10 +356,8 @@ static void append_oid(packet_info *pinfo, const char *oid)
 {
        const char *name = NULL;
 
-  if(check_col(pinfo->cinfo, COL_INFO)) {
     name = oid_resolved_from_string(oid);
     col_append_fstr(pinfo->cinfo, COL_INFO, " %s", name ? name : oid);
-  }
 }
 
 
@@ -385,6 +382,8 @@ static const asn_namedbit DSEType_bits[] = {
   { 15, &hf_dop_DSEType_sa, -1, -1, "sa", NULL },
   { 16, &hf_dop_DSEType_dsSubentry, -1, -1, "dsSubentry", NULL },
   { 17, &hf_dop_DSEType_familyMember, -1, -1, "familyMember", NULL },
+  { 18, &hf_dop_DSEType_ditBridge, -1, -1, "ditBridge", NULL },
+  { 19, &hf_dop_DSEType_writeableCopy, -1, -1, "writeableCopy", NULL },
   { 0, NULL, 0, 0, NULL, NULL }
 };
 
@@ -421,9 +420,7 @@ dissect_dop_T_identifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
                                                 &value);
 
 
-       if (check_col(actx->pinfo->cinfo, COL_INFO)) {
-                       col_append_fstr(actx->pinfo->cinfo, COL_INFO, " id=%d", value);
-       }
+       col_append_fstr(actx->pinfo->cinfo, COL_INFO, " id=%d", value);
 
 
 
@@ -436,16 +433,14 @@ dissect_dop_T_identifier(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
 
 static int
 dissect_dop_T_version(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 183 "dop.cnf"
+#line 181 "dop.cnf"
        guint32 value;
 
          offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
                                                 &value);
 
 
-       if (check_col(actx->pinfo->cinfo, COL_INFO)) {
-                       col_append_fstr(actx->pinfo->cinfo, COL_INFO, ",%d", value);
-       }
+       col_append_fstr(actx->pinfo->cinfo, COL_INFO, ",%d", value);
 
 
 
@@ -761,8 +756,8 @@ dissect_dop_T_validUntil(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
 
 
 static const ber_sequence_t Validity_sequence[] = {
-  { &hf_dop_validFrom       , BER_CLASS_CON, 0, 0, dissect_dop_T_validFrom },
-  { &hf_dop_validUntil      , BER_CLASS_CON, 1, 0, dissect_dop_T_validUntil },
+  { &hf_dop_validFrom       , BER_CLASS_CON, 0, BER_FLAGS_OPTIONAL, dissect_dop_T_validFrom },
+  { &hf_dop_validUntil      , BER_CLASS_CON, 1, BER_FLAGS_OPTIONAL, dissect_dop_T_validUntil },
   { NULL, 0, 0, 0, NULL }
 };
 
@@ -1566,7 +1561,7 @@ dissect_dop_NHOBSubordinateToSuperior(gboolean implicit_tag _U_, tvbuff_t *tvb _
 
 static int
 dissect_dop_Precedence(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
-#line 194 "dop.cnf"
+#line 190 "dop.cnf"
   guint32 precedence = 0;
 
     offset = dissect_ber_integer(implicit_tag, actx, tree, tvb, offset, hf_index,
@@ -2051,7 +2046,7 @@ static void dissect_ACIItem_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto
 
 
 /*--- End of included file: packet-dop-fn.c ---*/
-#line 93 "packet-dop-template.c"
+#line 88 "packet-dop-template.c"
 
 static int
 call_dop_oid_callback(char *base_string, tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *tree, char *col_info)
@@ -2060,8 +2055,7 @@ call_dop_oid_callback(char *base_string, tvbuff_t *tvb, int offset, packet_info
 
   binding_param = ep_strdup_printf("%s.%s", base_string, binding_type ? binding_type : "");
 
-  if (col_info && (check_col(pinfo->cinfo, COL_INFO))) 
-    col_append_fstr(pinfo->cinfo, COL_INFO, " %s", col_info);
+  col_append_fstr(pinfo->cinfo, COL_INFO, " %s", col_info);
 
   if (dissector_try_string(dop_dissector_table, binding_param, tvb, pinfo, tree)) {
      offset += tvb_length_remaining (tvb, offset);
@@ -2112,10 +2106,8 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
                item = proto_tree_add_item(parent_tree, proto_dop, tvb, 0, -1, FALSE);
                tree = proto_item_add_subtree(item, ett_dop);
        }
-       if (check_col(pinfo->cinfo, COL_PROTOCOL))
-               col_set_str(pinfo->cinfo, COL_PROTOCOL, "DOP");
-       if (check_col(pinfo->cinfo, COL_INFO))
-               col_clear(pinfo->cinfo, COL_INFO);
+       col_set_str(pinfo->cinfo, COL_PROTOCOL, "DOP");
+       col_clear(pinfo->cinfo, COL_INFO);
 
        switch(session->ros_op & ROS_OP_MASK) {
        case (ROS_OP_BIND | ROS_OP_ARGUMENT):   /*  BindInvoke */
@@ -2188,15 +2180,13 @@ dissect_dop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree)
        }
 
        if(dop_dissector) {
-         if (check_col(pinfo->cinfo, COL_INFO))
-           col_set_str(pinfo->cinfo, COL_INFO, dop_op_name);
+      col_set_str(pinfo->cinfo, COL_INFO, dop_op_name);
 
          while (tvb_reported_length_remaining(tvb, offset) > 0){
            old_offset=offset;
            offset=(*dop_dissector)(FALSE, tvb, offset, &asn1_ctx, tree, -1);
            if(offset == old_offset){
              proto_tree_add_text(tree, tvb, offset, -1,"Internal error, zero-byte DOP PDU");
-             offset = tvb_length(tvb);
              break;
            }
          }
@@ -2216,7 +2206,7 @@ void proto_register_dop(void) {
 #line 1 "packet-dop-hfarr.c"
     { &hf_dop_DSEType_PDU,
       { "DSEType", "dop.DSEType",
-        FT_BYTES, BASE_HEX, NULL, 0,
+        FT_BYTES, BASE_NONE, NULL, 0,
         "dop.DSEType", HFILL }},
     { &hf_dop_SupplierInformation_PDU,
       { "SupplierInformation", "dop.SupplierInformation",
@@ -2275,7 +2265,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_ProtocolInformation", HFILL }},
     { &hf_dop_protocolInformation_item,
-      { "Item", "dop.protocolInformation_item",
+      { "ProtocolInformation", "dop.ProtocolInformation",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509sat.ProtocolInformation", HFILL }},
     { &hf_dop_agreementID,
@@ -2284,7 +2274,7 @@ void proto_register_dop(void) {
         "dop.OperationalBindingID", HFILL }},
     { &hf_dop_supplier_is_master,
       { "supplier-is-master", "dop.supplier_is_master",
-        FT_BOOLEAN, 8, NULL, 0,
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
         "dop.BOOLEAN", HFILL }},
     { &hf_dop_non_supplying_master,
       { "non-supplying-master", "dop.non_supplying_master",
@@ -2295,7 +2285,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_AccessPoint", HFILL }},
     { &hf_dop_consumers_item,
-      { "Item", "dop.consumers_item",
+      { "AccessPoint", "dop.AccessPoint",
         FT_NONE, BASE_NONE, NULL, 0,
         "dsp.AccessPoint", HFILL }},
     { &hf_dop_bindingType,
@@ -2356,7 +2346,7 @@ void proto_register_dop(void) {
         "x509af.AlgorithmIdentifier", HFILL }},
     { &hf_dop_encrypted,
       { "encrypted", "dop.encrypted",
-        FT_BYTES, BASE_HEX, NULL, 0,
+        FT_BYTES, BASE_NONE, NULL, 0,
         "dop.BIT_STRING", HFILL }},
     { &hf_dop_identifier,
       { "identifier", "dop.identifier",
@@ -2376,7 +2366,7 @@ void proto_register_dop(void) {
         "dop.NULL", HFILL }},
     { &hf_dop_time,
       { "time", "dop.time",
-        FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(dop_Time_vals), 0,
         "dop.Time", HFILL }},
     { &hf_dop_validUntil,
       { "validUntil", "dop.validUntil",
@@ -2416,14 +2406,14 @@ void proto_register_dop(void) {
         "x509if.DistinguishedName", HFILL }},
     { &hf_dop_aliasDereferenced,
       { "aliasDereferenced", "dop.aliasDereferenced",
-        FT_BOOLEAN, 8, NULL, 0,
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
         "dop.BOOLEAN", HFILL }},
     { &hf_dop_notification,
       { "notification", "dop.notification",
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SEQUENCE_SIZE_1_MAX_OF_Attribute", HFILL }},
     { &hf_dop_notification_item,
-      { "Item", "dop.notification_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509if.Attribute", HFILL }},
     { &hf_dop_modifyInitiator,
@@ -2496,7 +2486,7 @@ void proto_register_dop(void) {
         "dop.TerminateRoleBInitiates", HFILL }},
     { &hf_dop_terminateAtTime,
       { "terminateAt", "dop.terminateAt",
-        FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(dop_Time_vals), 0,
         "dop.Time", HFILL }},
     { &hf_dop_unsignedTerminateOperationalBindingArgument,
       { "unsignedTerminateOperationalBindingArgument", "dop.unsignedTerminateOperationalBindingArgument",
@@ -2532,7 +2522,7 @@ void proto_register_dop(void) {
         "dop.T_agreementProposal", HFILL }},
     { &hf_dop_retryAt,
       { "retryAt", "dop.retryAt",
-        FT_UINT32, BASE_DEC, VALS(x509af_Time_vals), 0,
+        FT_UINT32, BASE_DEC, VALS(dop_Time_vals), 0,
         "dop.Time", HFILL }},
     { &hf_dop_rdn,
       { "rdn", "dop.rdn",
@@ -2551,7 +2541,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_entryInfo_item,
-      { "Item", "dop.entryInfo_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509if.Attribute", HFILL }},
     { &hf_dop_immediateSuperiorInfo,
@@ -2559,11 +2549,11 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_immediateSuperiorInfo_item,
-      { "Item", "dop.immediateSuperiorInfo_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509if.Attribute", HFILL }},
     { &hf_dop_DITcontext_item,
-      { "Item", "dop.DITcontext_item",
+      { "Vertex", "dop.Vertex",
         FT_NONE, BASE_NONE, NULL, 0,
         "dop.Vertex", HFILL }},
     { &hf_dop_admPointInfo,
@@ -2571,7 +2561,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_admPointInfo_item,
-      { "Item", "dop.admPointInfo_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509if.Attribute", HFILL }},
     { &hf_dop_subentries,
@@ -2579,7 +2569,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_SubentryInfo", HFILL }},
     { &hf_dop_subentries_item,
-      { "Item", "dop.subentries_item",
+      { "SubentryInfo", "dop.SubentryInfo",
         FT_NONE, BASE_NONE, NULL, 0,
         "dop.SubentryInfo", HFILL }},
     { &hf_dop_accessPoints,
@@ -2591,12 +2581,12 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_Attribute", HFILL }},
     { &hf_dop_info_item,
-      { "Item", "dop.info_item",
+      { "Attribute", "dop.Attribute",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509if.Attribute", HFILL }},
     { &hf_dop_alias,
       { "alias", "dop.alias",
-        FT_BOOLEAN, 8, NULL, 0,
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
         "dop.BOOLEAN", HFILL }},
     { &hf_dop_identificationTag,
       { "identificationTag", "dop.identificationTag",
@@ -2627,7 +2617,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_ItemPermission", HFILL }},
     { &hf_dop_itemPermissions_item,
-      { "Item", "dop.itemPermissions_item",
+      { "ItemPermission", "dop.ItemPermission",
         FT_NONE, BASE_NONE, NULL, 0,
         "dop.ItemPermission", HFILL }},
     { &hf_dop_userFirst,
@@ -2643,7 +2633,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_UserPermission", HFILL }},
     { &hf_dop_userPermissions_item,
-      { "Item", "dop.userPermissions_item",
+      { "UserPermission", "dop.UserPermission",
         FT_NONE, BASE_NONE, NULL, 0,
         "dop.UserPermission", HFILL }},
     { &hf_dop_entry,
@@ -2659,7 +2649,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_AttributeType", HFILL }},
     { &hf_dop_attributeType_item,
-      { "Item", "dop.attributeType_item",
+      { "AttributeType", "dop.AttributeType",
         FT_OID, BASE_NONE, NULL, 0,
         "x509if.AttributeType", HFILL }},
     { &hf_dop_allAttributeValues,
@@ -2667,7 +2657,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_AttributeType", HFILL }},
     { &hf_dop_allAttributeValues_item,
-      { "Item", "dop.allAttributeValues_item",
+      { "AttributeType", "dop.AttributeType",
         FT_OID, BASE_NONE, NULL, 0,
         "x509if.AttributeType", HFILL }},
     { &hf_dop_allUserAttributeTypesAndValues,
@@ -2679,7 +2669,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_AttributeTypeAndValue", HFILL }},
     { &hf_dop_attributeValue_item,
-      { "Item", "dop.attributeValue_item",
+      { "AttributeTypeAndValue", "dop.AttributeTypeAndValue",
         FT_NONE, BASE_NONE, NULL, 0,
         "crmf.AttributeTypeAndValue", HFILL }},
     { &hf_dop_selfValue,
@@ -2687,7 +2677,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_AttributeType", HFILL }},
     { &hf_dop_selfValue_item,
-      { "Item", "dop.selfValue_item",
+      { "AttributeType", "dop.AttributeType",
         FT_OID, BASE_NONE, NULL, 0,
         "x509if.AttributeType", HFILL }},
     { &hf_dop_rangeOfValues,
@@ -2699,7 +2689,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_MaxValueCount", HFILL }},
     { &hf_dop_maxValueCount_item,
-      { "Item", "dop.maxValueCount_item",
+      { "MaxValueCount", "dop.MaxValueCount",
         FT_NONE, BASE_NONE, NULL, 0,
         "dop.MaxValueCount", HFILL }},
     { &hf_dop_maxImmSub,
@@ -2711,7 +2701,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_RestrictedValue", HFILL }},
     { &hf_dop_restrictedBy_item,
-      { "Item", "dop.restrictedBy_item",
+      { "RestrictedValue", "dop.RestrictedValue",
         FT_NONE, BASE_NONE, NULL, 0,
         "dop.RestrictedValue", HFILL }},
     { &hf_dop_contexts,
@@ -2719,7 +2709,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_ContextAssertion", HFILL }},
     { &hf_dop_contexts_item,
-      { "Item", "dop.contexts_item",
+      { "ContextAssertion", "dop.ContextAssertion",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509if.ContextAssertion", HFILL }},
     { &hf_dop_classes,
@@ -2751,7 +2741,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_NameAndOptionalUID", HFILL }},
     { &hf_dop_name_item,
-      { "Item", "dop.name_item",
+      { "NameAndOptionalUID", "dop.NameAndOptionalUID",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509sat.NameAndOptionalUID", HFILL }},
     { &hf_dop_userGroup,
@@ -2759,7 +2749,7 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_NameAndOptionalUID", HFILL }},
     { &hf_dop_userGroup_item,
-      { "Item", "dop.userGroup_item",
+      { "NameAndOptionalUID", "dop.NameAndOptionalUID",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509sat.NameAndOptionalUID", HFILL }},
     { &hf_dop_subtree,
@@ -2767,12 +2757,12 @@ void proto_register_dop(void) {
         FT_UINT32, BASE_DEC, NULL, 0,
         "dop.SET_OF_SubtreeSpecification", HFILL }},
     { &hf_dop_subtree_item,
-      { "Item", "dop.subtree_item",
+      { "SubtreeSpecification", "dop.SubtreeSpecification",
         FT_NONE, BASE_NONE, NULL, 0,
         "x509if.SubtreeSpecification", HFILL }},
     { &hf_dop_grantsAndDenials,
       { "grantsAndDenials", "dop.grantsAndDenials",
-        FT_BYTES, BASE_HEX, NULL, 0,
+        FT_BYTES, BASE_NONE, NULL, 0,
         "dop.GrantsAndDenials", HFILL }},
     { &hf_dop_basicLevels,
       { "basicLevels", "dop.basicLevels",
@@ -2788,7 +2778,7 @@ void proto_register_dop(void) {
         "dop.INTEGER", HFILL }},
     { &hf_dop_signed,
       { "signed", "dop.signed",
-        FT_BOOLEAN, 8, NULL, 0,
+        FT_BOOLEAN, BASE_NONE, NULL, 0,
         "dop.BOOLEAN", HFILL }},
     { &hf_dop_other,
       { "other", "dop.other",
@@ -2797,178 +2787,186 @@ void proto_register_dop(void) {
     { &hf_dop_DSEType_root,
       { "root", "dop.root",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_glue,
       { "glue", "dop.glue",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_cp,
       { "cp", "dop.cp",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_entry,
       { "entry", "dop.entry",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_alias,
       { "alias", "dop.alias",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_subr,
       { "subr", "dop.subr",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_nssr,
       { "nssr", "dop.nssr",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_supr,
       { "supr", "dop.supr",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_xr,
       { "xr", "dop.xr",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_admPoint,
       { "admPoint", "dop.admPoint",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_subentry,
       { "subentry", "dop.subentry",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_shadow,
       { "shadow", "dop.shadow",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_immSupr,
       { "immSupr", "dop.immSupr",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_rhob,
       { "rhob", "dop.rhob",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_sa,
       { "sa", "dop.sa",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_dsSubentry,
       { "dsSubentry", "dop.dsSubentry",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_DSEType_familyMember,
       { "familyMember", "dop.familyMember",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
+    { &hf_dop_DSEType_ditBridge,
+      { "ditBridge", "dop.ditBridge",
+        FT_BOOLEAN, 8, NULL, 0x20,
+        NULL, HFILL }},
+    { &hf_dop_DSEType_writeableCopy,
+      { "writeableCopy", "dop.writeableCopy",
+        FT_BOOLEAN, 8, NULL, 0x10,
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantAdd,
       { "grantAdd", "dop.grantAdd",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyAdd,
       { "denyAdd", "dop.denyAdd",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantDiscloseOnError,
       { "grantDiscloseOnError", "dop.grantDiscloseOnError",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyDiscloseOnError,
       { "denyDiscloseOnError", "dop.denyDiscloseOnError",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantRead,
       { "grantRead", "dop.grantRead",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyRead,
       { "denyRead", "dop.denyRead",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantRemove,
       { "grantRemove", "dop.grantRemove",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyRemove,
       { "denyRemove", "dop.denyRemove",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantBrowse,
       { "grantBrowse", "dop.grantBrowse",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyBrowse,
       { "denyBrowse", "dop.denyBrowse",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantExport,
       { "grantExport", "dop.grantExport",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyExport,
       { "denyExport", "dop.denyExport",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantImport,
       { "grantImport", "dop.grantImport",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyImport,
       { "denyImport", "dop.denyImport",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantModify,
       { "grantModify", "dop.grantModify",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyModify,
       { "denyModify", "dop.denyModify",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantRename,
       { "grantRename", "dop.grantRename",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyRename,
       { "denyRename", "dop.denyRename",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantReturnDN,
       { "grantReturnDN", "dop.grantReturnDN",
         FT_BOOLEAN, 8, NULL, 0x20,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyReturnDN,
       { "denyReturnDN", "dop.denyReturnDN",
         FT_BOOLEAN, 8, NULL, 0x10,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantCompare,
       { "grantCompare", "dop.grantCompare",
         FT_BOOLEAN, 8, NULL, 0x08,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyCompare,
       { "denyCompare", "dop.denyCompare",
         FT_BOOLEAN, 8, NULL, 0x04,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantFilterMatch,
       { "grantFilterMatch", "dop.grantFilterMatch",
         FT_BOOLEAN, 8, NULL, 0x02,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyFilterMatch,
       { "denyFilterMatch", "dop.denyFilterMatch",
         FT_BOOLEAN, 8, NULL, 0x01,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_grantInvoke,
       { "grantInvoke", "dop.grantInvoke",
         FT_BOOLEAN, 8, NULL, 0x80,
-        "", HFILL }},
+        NULL, HFILL }},
     { &hf_dop_GrantsAndDenials_denyInvoke,
       { "denyInvoke", "dop.denyInvoke",
         FT_BOOLEAN, 8, NULL, 0x40,
-        "", HFILL }},
+        NULL, HFILL }},
 
 /*--- End of included file: packet-dop-hfarr.c ---*/
-#line 253 "packet-dop-template.c"
+#line 243 "packet-dop-template.c"
   };
 
   /* List of subtrees */
@@ -3047,7 +3045,7 @@ void proto_register_dop(void) {
     &ett_dop_GrantsAndDenials,
 
 /*--- End of included file: packet-dop-ettarr.c ---*/
-#line 260 "packet-dop-template.c"
+#line 250 "packet-dop-template.c"
   };
 
   module_t *dop_module;
@@ -3078,7 +3076,7 @@ void proto_register_dop(void) {
 
 /*--- proto_reg_handoff_dop --- */
 void proto_reg_handoff_dop(void) {
-  dissector_handle_t handle = NULL;
+  dissector_handle_t dop_handle;
 
 
 /*--- Included file: packet-dop-dis-tab.c ---*/
@@ -3103,7 +3101,7 @@ void proto_reg_handoff_dop(void) {
 
 
 /*--- End of included file: packet-dop-dis-tab.c ---*/
-#line 293 "packet-dop-template.c"
+#line 283 "packet-dop-template.c"
   /* APPLICATION CONTEXT */
 
   oid_add_from_string("id-ac-directory-operational-binding-management","2.5.3.3");
@@ -3111,9 +3109,8 @@ void proto_reg_handoff_dop(void) {
   /* ABSTRACT SYNTAXES */
     
   /* Register DOP with ROS (with no use of RTSE) */
-  if((handle = find_dissector("dop"))) {
-    register_ros_oid_dissector_handle("2.5.9.4", handle, 0, "id-as-directory-operational-binding-management", FALSE); 
-  }
+  dop_handle = find_dissector("dop");
+  register_ros_oid_dissector_handle("2.5.9.4", dop_handle, 0, "id-as-directory-operational-binding-management", FALSE); 
 
   /* BINDING TYPES */
 
@@ -3144,10 +3141,11 @@ void proto_reg_handoff_dop(void) {
 }
 
 void prefs_register_dop(void) {
+  static guint tcp_port = 0;
 
   /* de-register the old port */
   /* port 102 is registered by TPKT - don't undo this! */
-  if((tcp_port != 102) && tpkt_handle)
+  if((tcp_port > 0) && (tcp_port != 102) && tpkt_handle)
     dissector_delete("tcp.port", tcp_port, tpkt_handle);
 
   /* Set our port number for future use */