aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2003-11-10 07:44:47 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2003-11-10 07:44:47 +0000
commit6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb (patch)
tree9a4c7b43125bc3fef5496b17af623f22f00bf843
parent3937e6b70e7fc34c6b831013816ce73c2400c6fe (diff)
downloadwireshark-6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb.tar.gz
wireshark-6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb.tar.bz2
wireshark-6073e3b2653a4b0f4d4e8a579e963e7f0030f9bb.zip
Not all LDAP PDUs are aligned to the start of a TCP segment.
If we failed to dissect the GSS-SPNEGO blob it probably means that the segment is somewhere in the middle of an LDAP PDU. Just bail out and stop dissecting the PDU instead of aborting ethereal completely using g_assert() since this is not really a pathological error, its just something that can and will happen normally. svn path=/trunk/; revision=8925
-rw-r--r--gtk/dcerpc_stat.c43
-rw-r--r--packet-ldap.c10
2 files changed, 49 insertions, 4 deletions
diff --git a/gtk/dcerpc_stat.c b/gtk/dcerpc_stat.c
index 6b6812c0df..be0a6bc12a 100644
--- a/gtk/dcerpc_stat.c
+++ b/gtk/dcerpc_stat.c
@@ -1,7 +1,7 @@
/* dcerpc_stat.c
* dcerpc_stat 2002 Ronnie Sahlberg
*
- * $Id: dcerpc_stat.c,v 1.27 2003/10/27 01:35:53 sharpe Exp $
+ * $Id: dcerpc_stat.c,v 1.28 2003/11/10 07:44:47 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -388,16 +388,51 @@ dcerpcstat_program_select(GtkWidget *item _U_, gpointer key)
}
+static GtkWidget *program_submenu_menu;
+static GtkWidget *program_submenu_item;
+static GtkWidget *program_submenu_label;
+static int program_subitem_index;
+static char *first_menu_name;
static void
dcerpcstat_add_program_to_menu(dcerpc_uuid_key *k, dcerpc_uuid_value *v)
{
GtkWidget *program_menu_item;
+ GtkWidget *box;
+ char str[64];
+
+ switch(program_subitem_index%15){
+ case 0:
+
+ first_menu_name=v->name;
+ snprintf(str,63,"%s ...",v->name);
+ program_submenu_item=gtk_menu_item_new();
+ box=gtk_hbox_new(TRUE,0);
+ gtk_container_add(GTK_CONTAINER(program_submenu_item), box);
+
+ program_submenu_label=gtk_label_new(str);
+ gtk_box_pack_start(GTK_BOX(box), program_submenu_label, TRUE, TRUE, 0);
+ gtk_widget_show(program_submenu_label);
+ gtk_widget_show(box);
+
+ gtk_menu_append(GTK_MENU(prog_menu), program_submenu_item);
+ gtk_widget_show(program_submenu_item);
+
+ program_submenu_menu=gtk_menu_new();
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(program_submenu_item), program_submenu_menu);
+ break;
+ case 14:
+ snprintf(str,63,"%s - %s",first_menu_name,v->name);
+ gtk_label_set_text(GTK_LABEL(program_submenu_label), str);
+ break;
+/*qqq*/
+ }
+ program_subitem_index++;
program_menu_item=gtk_menu_item_new_with_label(v->name);
SIGNAL_CONNECT(program_menu_item, "activate", dcerpcstat_program_select, k);
gtk_widget_show(program_menu_item);
- gtk_menu_append(GTK_MENU(prog_menu), program_menu_item);
+ gtk_menu_append(GTK_MENU(program_submenu_menu), program_menu_item);
if(!dcerpc_uuid_program){
dcerpc_uuid_program=&k->uuid;
@@ -513,6 +548,10 @@ gtk_dcerpcstat_cb(GtkWidget *w _U_, gpointer d _U_)
prog_menu=gtk_menu_new();
current_uuid_key=NULL;
current_uuid_value=NULL;
+/*qqq*/
+ program_submenu_item=NULL;
+ program_submenu_menu=NULL;
+ program_subitem_index=0;
do {
new_uuid_key=NULL;
new_uuid_value=NULL;
diff --git a/packet-ldap.c b/packet-ldap.c
index f72e08eb29..d466bbb0dd 100644
--- a/packet-ldap.c
+++ b/packet-ldap.c
@@ -3,7 +3,7 @@
*
* See RFC 1777 (LDAP v2), RFC 2251 (LDAP v3), and RFC 2222 (SASL).
*
- * $Id: packet-ldap.c,v 1.68 2003/11/07 04:03:44 sahlberg Exp $
+ * $Id: packet-ldap.c,v 1.69 2003/11/10 07:44:46 sahlberg Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -2044,7 +2044,13 @@ dissect_ldap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
gtree = proto_item_add_subtree(gitem, ett_ldap_gssapi_token);
}
len = call_dissector(gssapi_wrap_handle, next_tvb, pinfo, gtree);
- g_assert(len != 0); /* GSS_Wrap() dissectors can't reject data */
+ /*
+ * if len is 0 it probably mean that we got a PDU that is not
+ * aligned to the start of the segment.
+ */
+ if(len==0){
+ return;
+ }
if (gitem != NULL)
proto_item_set_len(gitem, len);