aboutsummaryrefslogtreecommitdiffstats
path: root/packet-gssapi.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2002-09-08 01:43:44 +0000
committerGuy Harris <guy@alum.mit.edu>2002-09-08 01:43:44 +0000
commit849e1c6866578dd513960456af72c6e6e9534c76 (patch)
treed88c5d528a9ec42984949f74e4641a87b37eb268 /packet-gssapi.c
parentc949d231430a6dd33e4d2e8d7927870c1fdf70a3 (diff)
Add a "gssapi_lookup_oid()" that takes a binary OID (pointer and length)
as an argument, and looks up that OID in the GSSAPI OID hash table. Always use that routine to look up OIDs, so that we never use the result of "format_oid()" as the key (as that doesn't necessarily work). Make "gssapi_oids" static, as one should only look up GSSAPI authentication mechanism OIDs with "gssapi_lookup_oid()". In the SPNEGO dissector, free up the OID strings when we're done with them, and don't advance the offset past the OID until after we put the OID into the protocol tree. svn path=/trunk/; revision=6228
Diffstat (limited to 'packet-gssapi.c')
-rw-r--r--packet-gssapi.c56
1 files changed, 35 insertions, 21 deletions
diff --git a/packet-gssapi.c b/packet-gssapi.c
index bfd9a73297..70901d5f10 100644
--- a/packet-gssapi.c
+++ b/packet-gssapi.c
@@ -4,7 +4,7 @@
* Copyright 2002, Richard Sharpe <rsharpe@samba.org> Added a few
* bits and pieces ...
*
- * $Id: packet-gssapi.c,v 1.18 2002/09/08 01:07:40 sharpe Exp $
+ * $Id: packet-gssapi.c,v 1.19 2002/09/08 01:43:44 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -52,7 +52,7 @@ static gint ett_gssapi = -1;
* Subdissectors
*/
-GHashTable *gssapi_oids;
+static GHashTable *gssapi_oids;
static gint gssapi_oid_equal(gconstpointer k1, gconstpointer k2)
{
@@ -89,6 +89,37 @@ gssapi_init_oid(char *oid, int proto, int ett, dissector_handle_t handle,
g_hash_table_insert(gssapi_oids, key, value);
}
+/*
+ * This takes an OID in binary form, not an OID as a text string, as
+ * an argument.
+ */
+gssapi_oid_value *
+gssapi_lookup_oid(subid_t *oid, guint oid_len)
+{
+ gchar *oid_key;
+ gchar *p;
+ unsigned int i;
+ int len;
+ gssapi_oid_value *value;
+
+ /*
+ * Convert the OID to a string, as text strings are used as
+ * keys in the OID hash table.
+ */
+ oid_key = g_malloc(oid_len * 22 + 1);
+ p = oid_key;
+ len = sprintf(p, "%lu", (unsigned long)oid[0]);
+ p += len;
+ for (i = 1; i < oid_len;i++) {
+ len = sprintf(p, ".%lu", (unsigned long)oid[i]);
+ p += len;
+ }
+
+ value = g_hash_table_lookup(gssapi_oids, oid_key);
+ g_free(oid_key);
+ return value;
+}
+
/* Display an ASN1 parse error. Taken from packet-snmp.c */
static dissector_handle_t data_handle;
@@ -119,10 +150,7 @@ dissect_gssapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
gboolean def;
guint len1, oid_len, cls, con, tag, nbytes;
subid_t *oid;
- gchar *oid_string, *oid_key;
- gchar *p;
- unsigned int i;
- int len;
+ gchar *oid_string;
gssapi_oid_value *value;
volatile dissector_handle_t handle = NULL;
conversation_t *volatile conversation;
@@ -216,21 +244,9 @@ dissect_gssapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
/*
* Hand off to subdissector.
- * We can't use "oid_string", as it might contain an
- * interpretation of the OID after the raw string, so
- * we generate our own string for it.
*/
- oid_key = g_malloc(oid_len * 22 + 1);
- p = oid_key;
- len = sprintf(p, "%lu", (unsigned long)oid[0]);
- p += len;
- for (i = 1; i < oid_len;i++) {
- len = sprintf(p, ".%lu", (unsigned long)oid[i]);
- p += len;
- }
-
- if (((value = g_hash_table_lookup(gssapi_oids, oid_key)) == NULL) ||
+ if (((value = gssapi_lookup_oid(oid, oid_len)) == NULL) ||
!proto_is_protocol_enabled(value->proto)) {
proto_tree_add_text(subtree, tvb, offset, nbytes,
@@ -240,7 +256,6 @@ dissect_gssapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset += nbytes;
g_free(oid_string);
- g_free(oid_key);
/* No dissector for this oid */
@@ -261,7 +276,6 @@ dissect_gssapi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset += nbytes;
g_free(oid_string);
- g_free(oid_key);
/*
* This is not needed, as the sub-dissector adds a tree