SMB sidsnooping: use sid as key and name as value

Fixes "cast from 'const char *' to 'char *' drops const qualifier
[-Wcast-qual]", but changes the internal representation of
sid_name_table.

Change-Id: Ia853c3cf3010ea0cd1e2c975a23dd97e15be0fd6
Reviewed-on: https://code.wireshark.org/review/12157
Petri-Dish: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Dario Lombardo <lomato@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: João Valverde <j@v6e.pt>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Peter Wu 2015-11-25 23:15:58 +01:00 committed by Anders Broman
parent 20a41fae76
commit 58dc5b05b9
3 changed files with 12 additions and 64 deletions

View File

@ -57,36 +57,20 @@ static gboolean lsa_policy_information_tap_installed = FALSE;
static gboolean samr_query_dispinfo_tap_installed = FALSE;
char *
const char *
find_sid_name(const char *sid)
{
sid_name *sn;
sid_name old_sn;
old_sn.sid=(char*)sid;
sn=(sid_name *)g_hash_table_lookup(sid_name_table, &old_sn);
if(!sn){
return NULL;
}
return sn->name;
return (const char *)g_hash_table_lookup(sid_name_table, sid);
}
static void
add_sid_name_mapping(char *sid, char *name)
add_sid_name_mapping(const char *sid, const char *name)
{
sid_name *sn;
sid_name old_sn;
old_sn.sid=sid;
sn=(sid_name *)g_hash_table_lookup(sid_name_table, &old_sn);
if(sn){
if (find_sid_name(sid)) {
return;
}
sn=wmem_new(wmem_file_scope(), sid_name);
sn->sid=g_strdup(sid);
sn->name=g_strdup(name);
g_hash_table_insert(sid_name_table, sn, sn);
g_hash_table_insert(sid_name_table, g_strdup(sid), g_strdup(name));
}
@ -257,37 +241,6 @@ lsa_policy_information(void *dummy _U_, packet_info *pinfo _U_, epan_dissect_t *
return 0;
}
static void
sid_name_key_destroy(gpointer key_arg)
{
sid_name *sn = (sid_name *)key_arg;
g_free((gpointer)sn->sid);
g_free((gpointer)sn->name);
}
static gint
sid_name_equal(gconstpointer k1, gconstpointer k2)
{
const sid_name *sn1 = (const sid_name *)k1;
const sid_name *sn2 = (const sid_name *)k2;
return !strcmp(sn1->sid, sn2->sid);
}
static guint
sid_name_hash(gconstpointer k)
{
const sid_name *sn = (const sid_name *)k;
int i, sum;
for(sum=0,i=(int)strlen(sn->sid)-1;i>=0;i--){
sum+=sn->sid[i];
}
return sum;
}
static gint
ctx_handle_equal(gconstpointer k1, gconstpointer k2)
@ -321,8 +274,8 @@ sid_snooping_init(void)
samr_query_dispinfo_tap_installed=FALSE;
}
sid_name_table = g_hash_table_new_full(sid_name_hash, sid_name_equal,
sid_name_key_destroy, NULL);
sid_name_table = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, g_free);
ctx_handle_table = g_hash_table_new(ctx_handle_hash, ctx_handle_equal);
/* TODO this code needs to be rewritten from scratch
disabling it now so that it won't cause wireshark to abort due to

View File

@ -31,12 +31,7 @@
*/
WS_DLL_PUBLIC GHashTable *sid_name_table;
typedef struct _sid_name {
char *sid;
char *name;
} sid_name;
WS_DLL_PUBLIC
char *find_sid_name(const char *sid);
const char *find_sid_name(const char *sid);
#endif

View File

@ -42,12 +42,12 @@ smbsids_packet(void *pss _U_, packet_info *pinfo _U_, epan_dissect_t *edt _U_, c
}
static void
enum_sids(gpointer key _U_, gpointer value, gpointer userdata _U_)
enum_sids(gpointer key, gpointer value, gpointer userdata _U_)
{
sid_name *sn = (sid_name *)value;
const char *sid = (const char *)key;
const char *name = (const char *)value;
printf("%-60s %s\n", sn->sid, sn->name);
return;
printf("%-60s %s\n", sid, name);
}
static void