aboutsummaryrefslogtreecommitdiffstats
path: root/asn1
diff options
context:
space:
mode:
authorgal <gal@f5534014-38df-0310-8fa8-9805f1628bb7>2006-09-22 15:19:32 +0000
committergal <gal@f5534014-38df-0310-8fa8-9805f1628bb7>2006-09-22 15:19:32 +0000
commitd5cac7f0a126b2f711c89cfc168cce6656df87f7 (patch)
tree407ab5e287d89d337c93f3c243067fedc2858d16 /asn1
parent10ca839c468727a58b5d1e26ed7473eba6eef83f (diff)
When dissecting LDAP, the assumption was made that the maximum LDAP PDU size will be 65535. Anything bigger than this was considered not to be LDAP. However, LDAP can have PDU sizes bigger than this - a CRL can easily grow to be bigger than this, for example.
This patch makes the the maximum valid LDAP PDU size a preference. The default value for this new preference is 65535 for backwards compatibility. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@19288 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'asn1')
-rw-r--r--asn1/ldap/packet-ldap-template.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/asn1/ldap/packet-ldap-template.c b/asn1/ldap/packet-ldap-template.c
index 0ace0ae43c..456fa0aebc 100644
--- a/asn1/ldap/packet-ldap-template.c
+++ b/asn1/ldap/packet-ldap-template.c
@@ -160,6 +160,8 @@ static dissector_table_t ldap_name_dissector_table=NULL;
/* desegmentation of LDAP */
static gboolean ldap_desegment = TRUE;
static guint ldap_tcp_port = 389;
+static guint ldap_max_pdu_size = 65535;
+
static gboolean do_protocolop = FALSE;
static gchar *attr_type = NULL;
static gboolean is_binary_attr_type = FALSE;
@@ -1328,7 +1330,7 @@ dissect_ldap_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
*/
sasl_len=tvb_get_ntohl(tvb, 0);
- if( (sasl_len>65535)
+ if( (sasl_len>ldap_max_pdu_size)
|| (sasl_len<2) ){
goto this_was_not_sasl;
}
@@ -1363,7 +1365,7 @@ this_was_not_sasl:
offset=get_ber_length(NULL, tvb, 1, &ldap_len, &ind);
/* dont check ind since indefinite length is never used for ldap (famous last words)*/
- if(ldap_len<2 || ldap_len>65535){
+ if(ldap_len<2 || ldap_len>ldap_max_pdu_size){
goto this_was_not_normal_ldap;
}
@@ -1626,6 +1628,10 @@ void proto_register_ldap(void) {
"Set the port for LDAP operations",
10, &ldap_tcp_port);
+ prefs_register_uint_preference(ldap_module, "max_pdu", "LDAP Maximum PDU Size",
+ "The maximum LDAP PDU size. PDUs larger than this will be considered invalid.",
+ 10, &ldap_max_pdu_size);
+
proto_cldap = proto_register_protocol(
"Connectionless Lightweight Directory Access Protocol",
"CLDAP", "cldap");