aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-snmp.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2014-06-15 12:40:42 -0400
committerEvan Huus <eapache@gmail.com>2014-06-16 15:38:31 +0000
commit39d7c9df0a8b0d520f19668cb073dcab4d2bf04e (patch)
tree9999d1be44163fbd56e3e71f6334969fdfb7177a /epan/dissectors/packet-snmp.c
parentc76b70fa12de10c969227d49f8dfae497eaf0f09 (diff)
Remove emem in SNMP UAT, use glib instead
Change-Id: Ieea8c09d6a82285b0ba20f669c35394fbf195f50 Reviewed-on: https://code.wireshark.org/review/2241 Reviewed-by: Michael Mann <mmann78@netscape.net> Reviewed-by: Evan Huus <eapache@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-snmp.c')
-rw-r--r--epan/dissectors/packet-snmp.c257
1 files changed, 141 insertions, 116 deletions
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; i<num_ueas-1; i++) {
+ snmp_ue_assoc_t* u = &(ueas[i]);
+
+ /* RFC 3411 section 5 */
+ if ((u->engine.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; i<num_ueas-1; i++) {
- snmp_ue_assoc_t* u = &(ueas[i]);
-
- /* RFC 3411 section 5 */
- if ((u->engine.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:
+ */