From 8cbeee42fef8948282e411fbf59df1e87faa2669 Mon Sep 17 00:00:00 2001 From: etxrab Date: Tue, 2 Mar 2010 06:12:21 +0000 Subject: From Hitoshi Irino: Displaying value and type of IPFIX reverse PEN elements in data records https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=4399 git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@32082 f5534014-38df-0310-8fa8-9805f1628bb7 --- asn1/snmp/packet-snmp-template.c | 44 ++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) (limited to 'asn1/snmp') diff --git a/asn1/snmp/packet-snmp-template.c b/asn1/snmp/packet-snmp-template.c index 022dc2fd2e..90bbe4d6e5 100644 --- a/asn1/snmp/packet-snmp-template.c +++ b/asn1/snmp/packet-snmp-template.c @@ -1114,11 +1114,11 @@ static snmp_ue_assoc_t* localize_ue( snmp_ue_assoc_t* o, const guint8* engine, g #define localized_match(a,u,ul,e,el) \ ( a->user.userName.len == ul \ && a->engine.len == el \ - && memcmp( a->user.userName.data, u, (a->user.userName.len < ul) ? a->user.userName.len : ul ) == 0 \ - && memcmp( a->engine.data, e, (a->engine.len < el) ? a->engine.len : el ) == 0 ) + && memcmp( a->user.userName.data, u, ul ) == 0 \ + && memcmp( a->engine.data, e, el ) == 0 ) #define unlocalized_match(a,u,l) \ - ( a->user.userName.len == l && memcmp( a->user.userName.data, u, a->user.userName.len < l ? a->user.userName.len : l) == 0 ) + ( a->user.userName.len == l && memcmp( a->user.userName.data, u, l) == 0 ) static snmp_ue_assoc_t* get_user_assoc(tvbuff_t* engine_tvb, tvbuff_t* user_tvb) { static snmp_ue_assoc_t* a; @@ -1830,7 +1830,8 @@ static void snmp_usm_password_to_key_sha1(const guint8 *password, } -static void process_prefs(void) {} +static void process_prefs(void) { +} static void* snmp_users_copy_cb(void* dest, const void* orig, unsigned len _U_) { const snmp_ue_assoc_t* o = orig; @@ -1861,7 +1862,7 @@ static void* snmp_users_copy_cb(void* dest, const void* orig, unsigned len _U_) d->user.privKey.data = o->user.privKey.data ? g_memdup(o->user.privKey.data,o->user.privKey.len) : NULL; d->user.privKey.len = o->user.privKey.len; - + return d; } @@ -1878,16 +1879,40 @@ static void snmp_users_free_cb(void* p) { static void snmp_users_update_cb(void* p _U_, const char** err) { snmp_ue_assoc_t* ue = p; GString* es = g_string_new(""); - + unsigned i; + *err = NULL; - if (! ue->user.userName.len) g_string_append(es,"no userName, "); - + if (! ue->user.userName.len) + g_string_append_printf(es,"no userName\n",num_ueas); + + for (i=0; iuser.userName.len == ue->user.userName.len + && u->engine.len == ue->engine.len ) { + + if (u->engine.len > 0 && memcmp( u->engine.data, ue->engine.data, u->engine.len ) == 0) { + if ( memcmp( u->user.userName.data, ue->user.userName.data, ue->user.userName.len ) == 0 ) { + /* XXX: make a string for the engineId */ + g_string_append_printf(es,"duplicate key (userName='%s' engineId='???')\n",ue->user.userName.data); + } + } + + if (u->engine.len == 0) { + if ( memcmp( u->user.userName.data, ue->user.userName.data, ue->user.userName.len ) == 0 ) { + g_string_append_printf(es,"duplicate key (userName='%s' engineId=NONE)\n",ue->user.userName.data); + } + } + } + } + if (es->len) { g_string_truncate(es,es->len-2); *err = ep_strdup(es->str); } - + g_string_free(es,TRUE); return; @@ -2108,6 +2133,7 @@ void proto_register_snmp(void) { value_sub_dissectors_table = register_dissector_table("snmp.variable_oid","SNMP Variable OID", FT_STRING, BASE_NONE); register_init_routine(renew_ue_cache); + } -- cgit v1.2.3