aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/snmp
diff options
context:
space:
mode:
authoretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2010-03-02 06:12:21 +0000
committeretxrab <etxrab@f5534014-38df-0310-8fa8-9805f1628bb7>2010-03-02 06:12:21 +0000
commit8cbeee42fef8948282e411fbf59df1e87faa2669 (patch)
tree7de53d9240dd31bb1c66b86db2e52921dbfcea81 /asn1/snmp
parentd4caaf816a35c8c86529032ef43ccd10633cfe7d (diff)
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
Diffstat (limited to 'asn1/snmp')
-rw-r--r--asn1/snmp/packet-snmp-template.c44
1 files changed, 35 insertions, 9 deletions
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; i<num_ueas-1; i++) {
+ snmp_ue_assoc_t* u = &(ueas[i]);
+
+
+ if ( u->user.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);
+
}