aboutsummaryrefslogtreecommitdiffstats
path: root/packet-ldap.c
diff options
context:
space:
mode:
authorguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-03-02 21:28:19 +0000
committerguy <guy@f5534014-38df-0310-8fa8-9805f1628bb7>2002-03-02 21:28:19 +0000
commit41668258e45f3542cd109cb9df13855e5792a58e (patch)
tree0ae29ade2bf6626fedd9c3238b7dde118c5c0b21 /packet-ldap.c
parentac41304a8829126466af3c5d83882196536e46d4 (diff)
Don't check the message type if it's not of class ASN1_APL; instead,
just display the message type and body as an error. If the message type isn't a type we dissect, display the "Unknown message type" entry with the right offset and length. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@4850 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-ldap.c')
-rw-r--r--packet-ldap.c107
1 files changed, 58 insertions, 49 deletions
diff --git a/packet-ldap.c b/packet-ldap.c
index ce9371c754..ecbd90fe7f 100644
--- a/packet-ldap.c
+++ b/packet-ldap.c
@@ -1,7 +1,7 @@
/* packet-ldap.c
* Routines for ldap packet dissection
*
- * $Id: packet-ldap.c,v 1.37 2002/03/02 21:07:31 guy Exp $
+ * $Id: packet-ldap.c,v 1.38 2002/03/02 21:28:19 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -1098,7 +1098,7 @@ dissect_ldap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (protocolOpCls != ASN1_APL)
typestr = "Bad message type (not Application)";
else
- typestr = val_to_str(protocolOpTag, msgTypes, "Bad message type (%u)");
+ typestr = val_to_str(protocolOpTag, msgTypes, "Unknown message type (%u)");
if (first_time)
{
@@ -1123,54 +1123,63 @@ dissect_ldap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
return;
}
- switch (protocolOpTag)
+ if (protocolOpCls != ASN1_APL)
{
- case LDAP_REQ_BIND:
- ret = dissect_ldap_request_bind(&a, msg_tree);
- break;
- case LDAP_REQ_UNBIND:
- /* Nothing to dissect */
- break;
- case LDAP_REQ_SEARCH:
- ret = dissect_ldap_request_search(&a, msg_tree);
- break;
- case LDAP_REQ_MODIFY:
- ret = dissect_ldap_request_modify(&a, msg_tree);
- break;
- case LDAP_REQ_ADD:
- ret = dissect_ldap_request_add(&a, msg_tree);
- break;
- case LDAP_REQ_DELETE:
- ret = dissect_ldap_request_delete(&a, msg_tree, start, opLen);
- break;
- case LDAP_REQ_MODRDN:
- ret = dissect_ldap_request_modifyrdn(&a, msg_tree, opLen);
- break;
- case LDAP_REQ_COMPARE:
- ret = dissect_ldap_request_compare(&a, msg_tree);
- break;
- case LDAP_REQ_ABANDON:
- ret = dissect_ldap_request_abandon(&a, msg_tree, start, opLen);
- break;
- case LDAP_RES_BIND:
- dissect_ldap_response_bind(&a, msg_tree);
- break;
- case LDAP_RES_SEARCH_ENTRY:
- ret = dissect_ldap_response_search_entry(&a, msg_tree);
- break;
- case LDAP_RES_SEARCH_RESULT:
- case LDAP_RES_MODIFY:
- case LDAP_RES_ADD:
- case LDAP_RES_DELETE:
- case LDAP_RES_MODRDN:
- case LDAP_RES_COMPARE:
- ret = dissect_ldap_result(&a, msg_tree);
- break;
- default:
- proto_tree_add_text(msg_tree, a.tvb, start, 0,
- "Unknown LDAP operation (%u)", protocolOpTag);
- ret = ASN1_ERR_NOERROR;
- break;
+ proto_tree_add_text(msg_tree, a.tvb, a.offset, opLen,
+ "%s", typestr);
+ ret = ASN1_ERR_NOERROR;
+ }
+ else
+ {
+ switch (protocolOpTag)
+ {
+ case LDAP_REQ_BIND:
+ ret = dissect_ldap_request_bind(&a, msg_tree);
+ break;
+ case LDAP_REQ_UNBIND:
+ /* Nothing to dissect */
+ break;
+ case LDAP_REQ_SEARCH:
+ ret = dissect_ldap_request_search(&a, msg_tree);
+ break;
+ case LDAP_REQ_MODIFY:
+ ret = dissect_ldap_request_modify(&a, msg_tree);
+ break;
+ case LDAP_REQ_ADD:
+ ret = dissect_ldap_request_add(&a, msg_tree);
+ break;
+ case LDAP_REQ_DELETE:
+ ret = dissect_ldap_request_delete(&a, msg_tree, start, opLen);
+ break;
+ case LDAP_REQ_MODRDN:
+ ret = dissect_ldap_request_modifyrdn(&a, msg_tree, opLen);
+ break;
+ case LDAP_REQ_COMPARE:
+ ret = dissect_ldap_request_compare(&a, msg_tree);
+ break;
+ case LDAP_REQ_ABANDON:
+ ret = dissect_ldap_request_abandon(&a, msg_tree, start, opLen);
+ break;
+ case LDAP_RES_BIND:
+ dissect_ldap_response_bind(&a, msg_tree);
+ break;
+ case LDAP_RES_SEARCH_ENTRY:
+ ret = dissect_ldap_response_search_entry(&a, msg_tree);
+ break;
+ case LDAP_RES_SEARCH_RESULT:
+ case LDAP_RES_MODIFY:
+ case LDAP_RES_ADD:
+ case LDAP_RES_DELETE:
+ case LDAP_RES_MODRDN:
+ case LDAP_RES_COMPARE:
+ ret = dissect_ldap_result(&a, msg_tree);
+ break;
+ default:
+ proto_tree_add_text(msg_tree, a.tvb, a.offset, opLen,
+ "Unknown LDAP operation (%u)", protocolOpTag);
+ ret = ASN1_ERR_NOERROR;
+ break;
+ }
}
if (ret != ASN1_ERR_NOERROR) {