aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ieee80211.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-07-04 14:07:20 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-07-04 14:07:20 +0000
commit639e59a9f90f1f0dc4f673f8b1f37c9d64b84834 (patch)
treeb72a5b7d6be3d8e4e5edc594582ce11cd2bcd512 /epan/dissectors/packet-ieee80211.c
parent509c6a7fc070c271ce520739464e22e18e320bb1 (diff)
From Michael Mann:
Removed "key prefix" need within GUI so it's a little more intuitive (because that's what this bug is complaining about). Slight backwards compatibility issue with UAT (because key prefix was in previous keys), but all development (including fix for BUG 1123 that created UAT) has just been on SVN and not released. Also adjusted AirPCap (airpcap_loader.c) to account for the lack of "key prefix". Addressed some memory leaks/excess string creation. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=5985 svn path=/trunk/; revision=37888
Diffstat (limited to 'epan/dissectors/packet-ieee80211.c')
-rw-r--r--epan/dissectors/packet-ieee80211.c46
1 files changed, 12 insertions, 34 deletions
diff --git a/epan/dissectors/packet-ieee80211.c b/epan/dissectors/packet-ieee80211.c
index 5b472fb9f6..7d1f533255 100644
--- a/epan/dissectors/packet-ieee80211.c
+++ b/epan/dissectors/packet-ieee80211.c
@@ -166,22 +166,6 @@ static uat_wep_key_record_t *uat_wep_key_records = NULL;
static uat_t * wep_uat = NULL;
static guint num_wepkeys_uat = 0;
-/*
- * Convert a raw WEP key or one prefixed with "wep:" to a byte array.
- * Separators are allowed.
- */
-/* XXX This is duplicated in epan/airpdcap.c:parse_key_string() */
-static gboolean
-wep_str_to_bytes(const char *hex_str, GByteArray *bytes) {
- char *first_nibble = (char *) hex_str;
-
- if (g_ascii_strncasecmp(hex_str, STRING_KEY_TYPE_WEP ":", 4) == 0) {
- first_nibble += 4;
- }
-
- return hex_str_to_bytes(first_nibble, bytes, FALSE);
-}
-
static void* uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_) {
uat_wep_key_record_t* new_key = (uat_wep_key_record_t *)n;
const uat_wep_key_record_t* old_key = (uat_wep_key_record_t *)o;
@@ -198,31 +182,29 @@ static void* uat_wep_key_record_copy_cb(void* n, const void* o, size_t siz _U_)
static void uat_wep_key_record_update_cb(void* r, const char** err) {
uat_wep_key_record_t* rec = (uat_wep_key_record_t *)r;
decryption_key_t* dk;
- gchar* tmpk;
if (rec->string == NULL) {
*err = ep_strdup_printf("Key can't be blank");
} else {
g_strstrip(rec->string);
- tmpk = g_strdup(rec->string);
- dk = parse_key_string(tmpk);
+ dk = parse_key_string(rec->string, rec->key);
if(dk != NULL) {
switch(dk->type) {
case AIRPDCAP_KEY_TYPE_WEP:
case AIRPDCAP_KEY_TYPE_WEP_40:
case AIRPDCAP_KEY_TYPE_WEP_104:
- if (rec->key != 0) {
+ if (rec->key != AIRPDCAP_KEY_TYPE_WEP) {
*err = ep_strdup_printf("Invalid key format");
}
break;
case AIRPDCAP_KEY_TYPE_WPA_PWD:
- if (rec->key != 1) {
+ if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PWD) {
*err = ep_strdup_printf("Invalid key format");
}
break;
case AIRPDCAP_KEY_TYPE_WPA_PSK:
- if (rec->key != 2) {
+ if (rec->key != AIRPDCAP_KEY_TYPE_WPA_PSK) {
*err = ep_strdup_printf("Invalid key format");
}
break;
@@ -12552,9 +12534,9 @@ proto_register_ieee80211 (void)
};
static const value_string wep_type_vals[] = {
- { 0, STRING_KEY_TYPE_WEP },
- { 1, STRING_KEY_TYPE_WPA_PWD },
- { 2, STRING_KEY_TYPE_WPA_PSK },
+ { AIRPDCAP_KEY_TYPE_WEP, STRING_KEY_TYPE_WEP },
+ { AIRPDCAP_KEY_TYPE_WPA_PWD, STRING_KEY_TYPE_WPA_PWD },
+ { AIRPDCAP_KEY_TYPE_WPA_PSK, STRING_KEY_TYPE_WPA_PSK },
{ 0x00, NULL }
};
@@ -15789,8 +15771,8 @@ proto_register_ieee80211 (void)
prefs_register_static_text_preference(wlan_module, "info_decryption_key",
"Key examples: 01:02:03:04:05 (40/64-bit WEP),\n"
"010203040506070809101111213 (104/128-bit WEP),\n"
- "wpa-pwd:MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
- "wpa-psk:0102030405...6061626364 (WPA + 256-bit key). "
+ "MyPassword[:MyAP] (WPA + plaintext password [+ SSID]),\n"
+ "0102030405...6061626364 (WPA + 256-bit key). "
"Invalid keys will be ignored.",
"Valid key formats");
@@ -15975,16 +15957,13 @@ void set_airpdcap_keys(void)
decryption_key_t* dk = NULL;
GByteArray *bytes = NULL;
gboolean res;
- gchar* tmpk = NULL;
keys=(PAIRPDCAP_KEYS_COLLECTION)g_malloc(sizeof(AIRPDCAP_KEYS_COLLECTION));
keys->nKeys = 0;
for(i = 0; (uat_wep_key_records != NULL) && (i < num_wepkeys_uat) && (i < MAX_ENCRYPTION_KEYS); i++)
{
- tmpk = g_strdup(uat_wep_key_records[i].string);
-
- dk = parse_key_string(tmpk);
+ dk = parse_key_string(uat_wep_key_records[i].string, uat_wep_key_records[i].key);
if(dk != NULL)
{
@@ -15993,7 +15972,7 @@ void set_airpdcap_keys(void)
key.KeyType = AIRPDCAP_KEY_TYPE_WEP;
bytes = g_byte_array_new();
- res = wep_str_to_bytes(dk->key->str, bytes);
+ res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
if (dk->key->str && res && bytes->len > 0 && bytes->len <= AIRPDCAP_WEP_KEY_MAXLEN)
{
@@ -16031,7 +16010,7 @@ void set_airpdcap_keys(void)
key.KeyType = AIRPDCAP_KEY_TYPE_WPA_PMK;
bytes = g_byte_array_new();
- res = wep_str_to_bytes(dk->key->str, bytes);
+ res = hex_str_to_bytes(dk->key->str, bytes, FALSE);
/* XXX - Pass the correct array of bytes... */
if (bytes-> len <= AIRPDCAP_WPA_PMK_LEN) {
@@ -16042,7 +16021,6 @@ void set_airpdcap_keys(void)
}
}
}
- g_free(tmpk);
}
/* Now set the keys */