From 39d7c9df0a8b0d520f19668cb073dcab4d2bf04e Mon Sep 17 00:00:00 2001 From: Evan Huus Date: Sun, 15 Jun 2014 12:40:42 -0400 Subject: Remove emem in SNMP UAT, use glib instead Change-Id: Ieea8c09d6a82285b0ba20f669c35394fbf195f50 Reviewed-on: https://code.wireshark.org/review/2241 Reviewed-by: Michael Mann Reviewed-by: Evan Huus --- epan/dissectors/packet-snmp.c | 257 +++++++++++++++++++++++------------------- 1 file changed, 141 insertions(+), 116 deletions(-) (limited to 'epan/dissectors/packet-snmp.c') diff --git a/epan/dissectors/packet-snmp.c b/epan/dissectors/packet-snmp.c index 4706e83e77..c13b070945 100644 --- a/epan/dissectors/packet-snmp.c +++ b/epan/dissectors/packet-snmp.c @@ -1357,7 +1357,7 @@ dissect_snmp_engineid(proto_tree *tree, tvbuff_t *tvb, int offset, int len) static void set_ue_keys(snmp_ue_assoc_t* n ) { guint key_size = n->user.authModel->key_size; - n->user.authKey.data = (guint8 *)se_alloc(key_size); + n->user.authKey.data = (guint8 *)g_malloc(key_size); n->user.authKey.len = key_size; n->user.authModel->pass2key(n->user.authPassword.data, n->user.authPassword.len, @@ -1377,7 +1377,7 @@ static void set_ue_keys(snmp_ue_assoc_t* n ) { while (key_len < need_key_len) key_len += key_size; - n->user.privKey.data = (guint8 *)se_alloc(key_len); + n->user.privKey.data = (guint8 *)g_malloc(key_len); n->user.privKey.len = need_key_len; n->user.authModel->pass2key(n->user.privPassword.data, @@ -1401,7 +1401,7 @@ static void set_ue_keys(snmp_ue_assoc_t* n ) { } } else { - n->user.privKey.data = (guint8 *)se_alloc(key_size); + n->user.privKey.data = (guint8 *)g_malloc(key_size); n->user.privKey.len = key_size; n->user.authModel->pass2key(n->user.privPassword.data, n->user.privPassword.len, @@ -1412,27 +1412,27 @@ static void set_ue_keys(snmp_ue_assoc_t* n ) { } static snmp_ue_assoc_t* -ue_se_dup(snmp_ue_assoc_t* o) +ue_dup(snmp_ue_assoc_t* o) { - snmp_ue_assoc_t* d = (snmp_ue_assoc_t*)se_memdup(o,sizeof(snmp_ue_assoc_t)); + snmp_ue_assoc_t* d = (snmp_ue_assoc_t*)g_memdup(o,sizeof(snmp_ue_assoc_t)); d->user.authModel = o->user.authModel; d->user.privProtocol = o->user.privProtocol; - d->user.userName.data = (guint8 *)se_memdup(o->user.userName.data,o->user.userName.len); + d->user.userName.data = (guint8 *)g_memdup(o->user.userName.data,o->user.userName.len); d->user.userName.len = o->user.userName.len; - d->user.authPassword.data = o->user.authPassword.data ? (guint8 *)se_memdup(o->user.authPassword.data,o->user.authPassword.len) : NULL; + d->user.authPassword.data = o->user.authPassword.data ? (guint8 *)g_memdup(o->user.authPassword.data,o->user.authPassword.len) : NULL; d->user.authPassword.len = o->user.authPassword.len; - d->user.privPassword.data = o->user.privPassword.data ? (guint8 *)se_memdup(o->user.privPassword.data,o->user.privPassword.len) : NULL; + d->user.privPassword.data = o->user.privPassword.data ? (guint8 *)g_memdup(o->user.privPassword.data,o->user.privPassword.len) : NULL; d->user.privPassword.len = o->user.privPassword.len; d->engine.len = o->engine.len; if (d->engine.len) { - d->engine.data = (guint8 *)se_memdup(o->engine.data,o->engine.len); + d->engine.data = (guint8 *)g_memdup(o->engine.data,o->engine.len); set_ue_keys(d); } @@ -1440,20 +1440,131 @@ ue_se_dup(snmp_ue_assoc_t* o) } +static void* +snmp_users_copy_cb(void* dest, const void* orig, size_t len _U_) +{ + const snmp_ue_assoc_t* o = (const snmp_ue_assoc_t*)orig; + snmp_ue_assoc_t* d = (snmp_ue_assoc_t*)dest; + + d->auth_model = o->auth_model; + d->user.authModel = auth_models[o->auth_model]; + + d->priv_proto = o->priv_proto; + d->user.privProtocol = priv_protos[o->priv_proto]; + + d->user.userName.data = (guint8*)g_memdup(o->user.userName.data,o->user.userName.len); + d->user.userName.len = o->user.userName.len; + + d->user.authPassword.data = o->user.authPassword.data ? (guint8*)g_memdup(o->user.authPassword.data,o->user.authPassword.len) : NULL; + d->user.authPassword.len = o->user.authPassword.len; + + d->user.privPassword.data = o->user.privPassword.data ? (guint8*)g_memdup(o->user.privPassword.data,o->user.privPassword.len) : NULL; + d->user.privPassword.len = o->user.privPassword.len; + + d->engine.len = o->engine.len; + if (o->engine.data) { + d->engine.data = (guint8*)g_memdup(o->engine.data,o->engine.len); + } + + d->user.authKey.data = o->user.authKey.data ? (guint8*)g_memdup(o->user.authKey.data,o->user.authKey.len) : NULL; + d->user.authKey.len = o->user.authKey.len; + + d->user.privKey.data = o->user.privKey.data ? (guint8*)g_memdup(o->user.privKey.data,o->user.privKey.len) : NULL; + d->user.privKey.len = o->user.privKey.len; + + return d; +} + +static void +snmp_users_free_cb(void* p) +{ + snmp_ue_assoc_t* ue = (snmp_ue_assoc_t*)p; + g_free(ue->user.userName.data); + g_free(ue->user.authPassword.data); + g_free(ue->user.privPassword.data); + g_free(ue->user.authKey.data); + g_free(ue->user.privKey.data); + g_free(ue->engine.data); +} + +static void +snmp_users_update_cb(void* p _U_, const char** err) +{ + snmp_ue_assoc_t* ue = (snmp_ue_assoc_t*)p; + GString* es = g_string_new(""); + unsigned int i; + + *err = NULL; + + if (num_ueas == 0) + /* Nothing to update */ + return; + + if (! ue->user.userName.len) + g_string_append_printf(es,"no userName\n"); + + for (i=0; iengine.len > 0) && (u->engine.len < 5 || u->engine.len > 32)) { + g_string_append_printf(es, "Invalid engineId length (%u). Must be between 5 and 32 (10 and 64 hex digits)\n", u->engine.len); + } + + + if ( u->user.userName.len == ue->user.userName.len + && u->engine.len == ue->engine.len && (u != ue)) { + + 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')\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) { + es = g_string_truncate(es,es->len-1); + *err = g_string_free(es, FALSE); + } + + return; +} + +static void +free_ue_cache(snmp_ue_assoc_t **cache) +{ + static snmp_ue_assoc_t *a, *nxt; + + for (a = *cache; a; a = nxt) { + nxt = a->next; + snmp_users_free_cb(a); + g_free(a); + } + + *cache = NULL; +} #define CACHE_INSERT(c,a) if (c) { snmp_ue_assoc_t* t = c; c = a; c->next = t; } else { c = a; a->next = NULL; } static void renew_ue_cache(void) { - localized_ues = NULL; - unlocalized_ues = NULL; + free_ue_cache(&localized_ues); + free_ue_cache(&unlocalized_ues); if (num_ueas) { guint i; for(i = 0; i < num_ueas; i++) { - snmp_ue_assoc_t* a = ue_se_dup(&(ueas[i])); + snmp_ue_assoc_t* a = ue_dup(&(ueas[i])); if (a->engine.len) { CACHE_INSERT(localized_ues,a); @@ -1470,9 +1581,9 @@ renew_ue_cache(void) static snmp_ue_assoc_t* localize_ue( snmp_ue_assoc_t* o, const guint8* engine, guint engine_len ) { - snmp_ue_assoc_t* n = (snmp_ue_assoc_t*)se_memdup(o,sizeof(snmp_ue_assoc_t)); + snmp_ue_assoc_t* n = (snmp_ue_assoc_t*)g_memdup(o,sizeof(snmp_ue_assoc_t)); - n->engine.data = (guint8*)se_memdup(engine,engine_len); + n->engine.data = (guint8*)g_memdup(engine,engine_len); n->engine.len = engine_len; set_ue_keys(n); @@ -2981,7 +3092,7 @@ static void dissect_SMUX_PDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro /*--- End of included file: packet-snmp-fn.c ---*/ -#line 1770 "../../asn1/snmp/packet-snmp-template.c" +#line 1881 "../../asn1/snmp/packet-snmp-template.c" guint @@ -3392,105 +3503,6 @@ process_prefs(void) { } -static void* -snmp_users_copy_cb(void* dest, const void* orig, size_t len _U_) -{ - const snmp_ue_assoc_t* o = (const snmp_ue_assoc_t*)orig; - snmp_ue_assoc_t* d = (snmp_ue_assoc_t*)dest; - - d->auth_model = o->auth_model; - d->user.authModel = auth_models[o->auth_model]; - - d->priv_proto = o->priv_proto; - d->user.privProtocol = priv_protos[o->priv_proto]; - - d->user.userName.data = (guint8*)g_memdup(o->user.userName.data,o->user.userName.len); - d->user.userName.len = o->user.userName.len; - - d->user.authPassword.data = o->user.authPassword.data ? (guint8*)g_memdup(o->user.authPassword.data,o->user.authPassword.len) : NULL; - d->user.authPassword.len = o->user.authPassword.len; - - d->user.privPassword.data = o->user.privPassword.data ? (guint8*)g_memdup(o->user.privPassword.data,o->user.privPassword.len) : NULL; - d->user.privPassword.len = o->user.privPassword.len; - - d->engine.len = o->engine.len; - if (o->engine.data) { - d->engine.data = (guint8*)g_memdup(o->engine.data,o->engine.len); - } - - d->user.authKey.data = o->user.authKey.data ? (guint8*)g_memdup(o->user.authKey.data,o->user.authKey.len) : NULL; - d->user.authKey.len = o->user.authKey.len; - - d->user.privKey.data = o->user.privKey.data ? (guint8*)g_memdup(o->user.privKey.data,o->user.privKey.len) : NULL; - d->user.privKey.len = o->user.privKey.len; - - return d; -} - -static void -snmp_users_free_cb(void* p) -{ - snmp_ue_assoc_t* ue = (snmp_ue_assoc_t*)p; - g_free(ue->user.userName.data); - g_free(ue->user.authPassword.data); - g_free(ue->user.privPassword.data); - g_free(ue->user.authKey.data); - g_free(ue->user.privKey.data); - g_free(ue->engine.data); -} - -static void -snmp_users_update_cb(void* p _U_, const char** err) -{ - snmp_ue_assoc_t* ue = (snmp_ue_assoc_t*)p; - GString* es = g_string_new(""); - unsigned int i; - - *err = NULL; - - if (num_ueas == 0) - /* Nothing to update */ - return; - - if (! ue->user.userName.len) - g_string_append_printf(es,"no userName\n"); - - for (i=0; iengine.len > 0) && (u->engine.len < 5 || u->engine.len > 32)) { - g_string_append_printf(es, "Invalid engineId length (%u). Must be between 5 and 32 (10 and 64 hex digits)\n", u->engine.len); - } - - - if ( u->user.userName.len == ue->user.userName.len - && u->engine.len == ue->engine.len && (u != ue)) { - - 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')\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) { - es = g_string_truncate(es,es->len-1); - *err = g_string_free(es, FALSE); - } - - return; -} - - UAT_LSTRING_CB_DEF(snmp_users,userName,snmp_ue_assoc_t,user.userName.data,user.userName.len) UAT_LSTRING_CB_DEF(snmp_users,authPassword,snmp_ue_assoc_t,user.authPassword.data,user.authPassword.len) UAT_LSTRING_CB_DEF(snmp_users,privPassword,snmp_ue_assoc_t,user.privPassword.data,user.privPassword.len) @@ -3907,7 +3919,7 @@ void proto_register_snmp(void) { NULL, HFILL }}, /*--- End of included file: packet-snmp-hfarr.c ---*/ -#line 2431 "../../asn1/snmp/packet-snmp-template.c" +#line 2443 "../../asn1/snmp/packet-snmp-template.c" }; /* List of subtrees */ @@ -3947,7 +3959,7 @@ void proto_register_snmp(void) { &ett_snmp_RReqPDU_U, /*--- End of included file: packet-snmp-ettarr.c ---*/ -#line 2447 "../../asn1/snmp/packet-snmp-template.c" +#line 2459 "../../asn1/snmp/packet-snmp-template.c" }; static ei_register_info ei[] = { { &ei_snmp_failed_decrypted_data_pdu, { "snmp.failed_decrypted_data_pdu", PI_MALFORMED, PI_WARN, "Failed to decrypt encryptedPDU", EXPFILL }}, @@ -4152,3 +4164,16 @@ proto_reg_handoff_smux(void) smux_handle = create_dissector_handle(dissect_smux, proto_smux); dissector_add_uint("tcp.port", TCP_PORT_SMUX, smux_handle); } + +/* + * Editor modelines - http://www.wireshark.org/tools/modelines.html + * + * Local variables: + * c-basic-offset: 8 + * tab-width: 8 + * indent-tabs-mode: t + * End: + * + * vi: set shiftwidth=8 tabstop=8 noexpandtab: + * :indentSize=8:tabSize=8:noTabs=false: + */ -- cgit v1.2.3