diff options
author | Gerald Combs <gerald@wireshark.org> | 2006-10-30 06:34:31 +0000 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2006-10-30 06:34:31 +0000 |
commit | ff8422a3e4234141625de38b0999ff434715a3bd (patch) | |
tree | fb037fae95d048a96d7616f57b88463edbbdbead /gtk | |
parent | b8b14bf66a3fef1f360ad8236fa6fc8f0a688a43 (diff) |
From Giorgio Tino: Add support for version 2.0 of the AirPcap driver,
which has an updated API for WEP key handling.
svn path=/trunk/; revision=19736
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/about_dlg.c | 2 | ||||
-rw-r--r-- | gtk/airpcap_dlg.c | 148 | ||||
-rwxr-xr-x | gtk/airpcap_gui_utils.c | 213 | ||||
-rwxr-xr-x | gtk/airpcap_gui_utils.h | 8 | ||||
-rw-r--r-- | gtk/main.c | 23 |
5 files changed, 327 insertions, 67 deletions
diff --git a/gtk/about_dlg.c b/gtk/about_dlg.c index eee578ca5c..3744530c8b 100644 --- a/gtk/about_dlg.c +++ b/gtk/about_dlg.c @@ -80,7 +80,7 @@ about_wireshark(GtkWidget *parent, GtkWidget *main_vb, const char *title) } -GtkWidget * +GtkWidget* splash_new(char *message) { GtkWidget *win; diff --git a/gtk/airpcap_dlg.c b/gtk/airpcap_dlg.c index dba152df71..ecde5677af 100644 --- a/gtk/airpcap_dlg.c +++ b/gtk/airpcap_dlg.c @@ -558,7 +558,7 @@ airpcap_change_if(GtkWidget *entry _U_, gpointer data) /* Remove old keys */ gtk_list_remove_items(GTK_LIST(key_ls),GTK_LIST(key_ls)->children); /* Add new keys */ - airpcap_fill_key_list(key_ls,airpcap_if_selected); + airpcap_fill_key_list(key_ls); /* Enable the signals again */ block_advanced_signals = FALSE; @@ -1831,7 +1831,6 @@ cf_redissect_packets(&cfile); void update_decryption_mode_cm(GtkWidget *w) { - /* Wireshark decryption is on */ if(wireshark_decryption_on()) { @@ -2508,6 +2507,7 @@ airpcap_if_selected = airpcap_if_active; /* Create the new window */ key_management_w = window_new(GTK_WINDOW_TOPLEVEL, "Decryption Keys Management"); + gtk_container_set_border_width (GTK_CONTAINER (key_management_w), 5); gtk_window_set_title (GTK_WINDOW (key_management_w), "Decryption Keys Management"); @@ -2606,8 +2606,6 @@ key_ls = gtk_clist_new (3); gtk_widget_set_name (key_ls, "key_ls"); gtk_widget_show (key_ls); -airpcap_fill_key_list(key_ls,airpcap_if_selected); - gtk_container_add (GTK_CONTAINER (keys_scrolled_w), key_ls); gtk_clist_set_column_width (GTK_CLIST (key_ls), 0, 54); gtk_clist_set_column_width (GTK_CLIST (key_ls), 1, 113); @@ -2756,6 +2754,7 @@ OBJECT_SET_DATA (key_management_w, AIRPCAP_ADVANCED_CANCEL_KEY, cancel_bt); OBJECT_SET_DATA(key_management_w,AIRPCAP_TOOLBAR_KEY,toolbar); OBJECT_SET_DATA (key_management_w, AIRPCAP_TOOLBAR_DECRYPTION_KEY, toolbar_decryption_ck); +/* FIRST OF ALL, CHECK THE KEY COLLECTIONS */ /* * This will read the decryption keys from the preferences file, and will store * them into the registry... @@ -2768,9 +2767,10 @@ if(!airpcap_check_decryption_keys(airpcap_if_list)) else /* Keys from lists are equals, or wireshark has got no keys */ { airpcap_load_decryption_keys(airpcap_if_list); + airpcap_fill_key_list(key_ls); /* At the end, so that it appears completely all together ... */ - gtk_widget_show (key_management_w); - } + gtk_widget_show (key_management_w); + } } /* @@ -3102,6 +3102,7 @@ on_keys_check_cancel_bt_clicked (GtkWidget *button, gpointer user_data) { GtkWidget *key_management_w; GtkWidget *keys_check_w; +GtkWidget *key_ls; keys_check_w = GTK_WIDGET(user_data); @@ -3109,11 +3110,13 @@ key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY); /* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, and is not NULL if it was called when the Key Management widget has been clicked */ - if(key_management_w != NULL) - { - /* ... */ - gtk_widget_show (key_management_w); - } +if(key_management_w != NULL) + { + /* ... */ + key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY); + airpcap_fill_key_list(key_ls); + gtk_widget_show (key_management_w); + } gtk_widget_destroy(keys_check_w); } @@ -3157,22 +3160,53 @@ on_keep_bt_clicked (GtkWidget *button, gpointer user_data) { GtkWidget *key_management_w; GtkWidget *keys_check_w; +GtkWidget *key_ls=NULL; + +GList* wireshark_keys=NULL; +guint n_wireshark_keys = 0; + +GList* merged_keys=NULL; +guint n_merged_keys = 0; + +guint n_adapters=0; +guint n_total_keys=0; keys_check_w = GTK_WIDGET(user_data); key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY); -/* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, - and is not NULL if it was called when the Key Management widget has been clicked */ - if(key_management_w != NULL) - { - /* ... */ - gtk_widget_show (key_management_w); - } +n_adapters = g_list_length(airpcap_if_list); +/* Retrieve Wireshark keys */ +wireshark_keys = get_wireshark_keys(); +n_wireshark_keys = g_list_length(wireshark_keys); +n_total_keys += n_wireshark_keys; + +merged_keys = merge_key_list(wireshark_keys,NULL); +n_merged_keys = g_list_length(merged_keys); + +/* Set up this new list as default for Wireshark and Adapters... */ +airpcap_save_decryption_keys(merged_keys,airpcap_if_list); + +/* Write the preferences to the preferences file (here is not needed, by the way)*/ +write_prefs_to_file(); + +/* Free the memory */ +free_key_list(wireshark_keys); +free_key_list(merged_keys); + +/* Close the window */ gtk_widget_destroy(keys_check_w); -airpcap_load_decryption_keys(airpcap_if_list); +/* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, + and is not NULL if it was called when the Key Management widget has been clicked */ +if(key_management_w != NULL) + { + /* ... */ + key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY); + airpcap_fill_key_list(key_ls); + gtk_widget_show (key_management_w); + } } void @@ -3180,15 +3214,18 @@ on_merge_bt_clicked (GtkWidget * button, gpointer user_data) { GtkWidget *key_management_w; GtkWidget *keys_check_w; +GtkWidget *key_ls; guint n_adapters = 0; guint n_wireshark_keys = 0; +guint n_driver_keys = 0; guint n_curr_adapter_keys = 0; guint n_total_keys = 0; guint n_merged_keys = 0; guint i = 0; GList* wireshark_keys=NULL; +GList* driver_keys=NULL; GList* current_adapter_keys=NULL; GList* merged_list = NULL; GList* merged_list_tmp = NULL; @@ -3199,24 +3236,23 @@ keys_check_w = GTK_WIDGET(user_data); key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY); - -/* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, - and is not NULL if it was called when the Key Management widget has been clicked */ -if(key_management_w != NULL) - { - /* ... */ - gtk_widget_show (key_management_w); - } - n_adapters = g_list_length(airpcap_if_list); +/* Retrieve Wireshark keys */ wireshark_keys = get_wireshark_keys(); n_wireshark_keys = g_list_length(wireshark_keys); n_total_keys += n_wireshark_keys; merged_list = merge_key_list(wireshark_keys,NULL); -/* NOW wireshark_keys IS no more needed... at the end, we will have to free it! */ +/* Retrieve AirPcap driver's keys */ +driver_keys = get_airpcap_driver_keys(); +n_driver_keys = g_list_length(driver_keys); +n_total_keys += n_driver_keys; + +merged_list = merge_key_list(merged_list,driver_keys); + +/* NOW wireshark_keys and driver_keys ARE no more needed... at the end, we will have to free them! */ for(i = 0; i<n_adapters; i++) { curr_adapter = (airpcap_if_info_t*)g_list_nth_data(airpcap_if_list,i); @@ -3239,8 +3275,19 @@ airpcap_save_decryption_keys(merged_list,airpcap_if_list); write_prefs_to_file(); free_key_list(wireshark_keys); +free_key_list(driver_keys); gtk_widget_destroy(keys_check_w); + +/* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, + and is not NULL if it was called when the Key Management widget has been clicked */ +if(key_management_w != NULL) + { + /* ... */ + key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY); + airpcap_fill_key_list(key_ls); + gtk_widget_show (key_management_w); + } } @@ -3249,15 +3296,18 @@ on_import_bt_clicked (GtkWidget * button, gpointer user_data) { GtkWidget *key_management_w; GtkWidget *keys_check_w; +GtkWidget *key_ls; guint n_adapters = 0; guint n_wireshark_keys = 0; +guint n_driver_keys = 0; guint n_curr_adapter_keys = 0; guint n_total_keys = 0; guint n_merged_keys = 0; guint i = 0; GList* wireshark_keys=NULL; +GList* driver_keys=NULL; GList* current_adapter_keys=NULL; GList* merged_list = NULL; GList* merged_list_tmp = NULL; @@ -3268,21 +3318,19 @@ keys_check_w = GTK_WIDGET(user_data); key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY); - -/* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, - and is not NULL if it was called when the Key Management widget has been clicked */ -if(key_management_w != NULL) - { - /* ... */ - gtk_widget_show (key_management_w); - } - n_adapters = g_list_length(airpcap_if_list); wireshark_keys = get_wireshark_keys(); n_wireshark_keys = g_list_length(wireshark_keys); n_total_keys += n_wireshark_keys; +/* Retrieve AirPcap driver's keys */ +driver_keys = get_airpcap_driver_keys(); +n_driver_keys = g_list_length(driver_keys); +n_total_keys += n_driver_keys; + +merged_list = merge_key_list(merged_list,driver_keys); + /* NOW wireshark_keys IS no more needed... at the end, we will have to free it! */ for(i = 0; i<n_adapters; i++) { @@ -3306,8 +3354,19 @@ airpcap_save_decryption_keys(merged_list,airpcap_if_list); write_prefs_to_file(); free_key_list(wireshark_keys); +free_key_list(driver_keys); gtk_widget_destroy(keys_check_w); + +/* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, + and is not NULL if it was called when the Key Management widget has been clicked */ +if(key_management_w != NULL) + { + /* ... */ + key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY); + airpcap_fill_key_list(key_ls); + gtk_widget_show (key_management_w); + } } @@ -3316,6 +3375,7 @@ on_ignore_bt_clicked (GtkWidget * button, gpointer user_data) { GtkWidget *key_management_w; GtkWidget *keys_check_w; +GtkWidget *key_ls; keys_check_w = GTK_WIDGET(user_data); @@ -3323,11 +3383,13 @@ key_management_w = OBJECT_GET_DATA(keys_check_w,AIRPCAP_CHECK_WINDOW_KEY); /* w may be NULL if airpcap_keys_check_w() has been called while wireshark was loading, and is not NULL if it was called when the Key Management widget has been clicked */ - if(key_management_w != NULL) - { - /* ... */ - gtk_widget_show (key_management_w); - } +if(key_management_w != NULL) + { + /* ... */ + key_ls = OBJECT_GET_DATA(key_management_w,AIRPCAP_ADVANCED_KEYLIST_KEY); + airpcap_fill_key_list(key_ls); + gtk_widget_show (key_management_w); + } gtk_widget_destroy(keys_check_w); } diff --git a/gtk/airpcap_gui_utils.c b/gtk/airpcap_gui_utils.c index 19f1a87cc6..20c6e47ce0 100755 --- a/gtk/airpcap_gui_utils.c +++ b/gtk/airpcap_gui_utils.c @@ -274,35 +274,41 @@ g_free(new_row[2]); * Fill the list with the keys */ void -airpcap_fill_key_list(GtkWidget *keylist,airpcap_if_info_t* if_info) +airpcap_fill_key_list(GtkWidget *keylist) { gchar* s; unsigned int i,n; gchar* new_row[3]; +airpcap_if_info_t* fake_if_info; +GList* wireshark_key_list=NULL; +decryption_key_t* curr_key = NULL; n = 0; - if( (if_info != NULL) && (if_info->keysCollection != NULL)) +fake_if_info = airpcap_driver_fake_if_info_new(); + + /* We can retrieve the driver's key list (i.e. we have the right .dll)*/ + if( (fake_if_info != NULL) && (fake_if_info->keysCollection != NULL)) { - n = if_info->keysCollection->nKeys; - for(i = 0; i < if_info->keysCollection->nKeys; i++) + n = fake_if_info->keysCollection->nKeys; + for(i = 0; i < n; i++) { - s = airpcap_get_key_string(if_info->keysCollection->Keys[i]); + s = airpcap_get_key_string(fake_if_info->keysCollection->Keys[i]); - if(if_info->keysCollection->Keys[i].KeyType == AIRPCAP_KEYTYPE_WEP) + if(fake_if_info->keysCollection->Keys[i].KeyType == AIRPCAP_KEYTYPE_WEP) { new_row[0] = g_strdup(AIRPCAP_WEP_KEY_STRING); new_row[1] = g_strdup(s); new_row[2] = g_strdup(""); } - else if(if_info->keysCollection->Keys[i].KeyType == AIRPCAP_KEYTYPE_TKIP) + else if(fake_if_info->keysCollection->Keys[i].KeyType == AIRPCAP_KEYTYPE_TKIP) { new_row[0] = g_strdup(AIRPCAP_WPA_KEY_STRING); new_row[1] = g_strdup(s); /* XXX - Put here the SSID */ new_row[2] = g_strdup(""); } - else if(if_info->keysCollection->Keys[i].KeyType == AIRPCAP_KEYTYPE_CCMP) + else if(fake_if_info->keysCollection->Keys[i].KeyType == AIRPCAP_KEYTYPE_CCMP) { new_row[0] = g_strdup(AIRPCAP_WPA2_KEY_STRING); new_row[1] = g_strdup(s); @@ -326,6 +332,32 @@ n = 0; g_free(s); } } + else + { + wireshark_key_list = get_wireshark_keys(); + n = g_list_length(wireshark_key_list); + + for(i = 0; i < n; i++) + { + curr_key = (decryption_key_t*)g_list_nth_data(wireshark_key_list,i); + s = g_strdup(curr_key->key->str); + + new_row[0] = g_strdup(AIRPCAP_WEP_KEY_STRING); + new_row[1] = g_strdup(s); + new_row[2] = g_strdup(""); + + gtk_clist_append(GTK_CLIST(keylist),new_row); + + g_free(new_row[0]); + g_free(new_row[1]); + g_free(new_row[2]); + + g_free(s); + } + } + +airpcap_if_info_free(fake_if_info); +return; } /* @@ -575,7 +607,7 @@ KeysCollectionSize = sizeof(AirpcapKeysCollection) + keys_in_list * sizeof(Airpc /* * Allocate the collection */ -KeysCollection = (PAirpcapKeysCollection)malloc(KeysCollectionSize); +KeysCollection = (PAirpcapKeysCollection)g_malloc(KeysCollectionSize); if(!KeysCollection) { /* Simple dialog ERROR */ @@ -634,6 +666,104 @@ return; } /* + * Takes the keys from the GtkList widget, and add them to the interface list + */ +void +airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_if_info) +{ +GString *new_key; + +gchar *text_entered = NULL; + +/* airpcap stuff */ +UINT i, j; +gchar s[3]; +PAirpcapKeysCollection KeysCollection; +ULONG KeysCollectionSize; +UCHAR KeyByte; + +UINT keys_in_list = 0; + +gchar *row_type, + *row_key, + *row_ssid; + +if(fake_if_info == NULL) + return; + +keys_in_list = GTK_CLIST(key_ls)->rows; + +/* + * Save the encryption keys, if we have any of them + */ +KeysCollectionSize = 0; + +/* + * Calculate the size of the keys collection + */ +KeysCollectionSize = sizeof(AirpcapKeysCollection) + keys_in_list * sizeof(AirpcapKey); + +/* + * Allocate the collection + */ +KeysCollection = (PAirpcapKeysCollection)g_malloc(KeysCollectionSize); +if(!KeysCollection) +{ + /* Simple dialog ERROR */ + simple_dialog(ESD_TYPE_ERROR,ESD_BTN_OK,"%s","Failed mamory allocation for KeysCollection!"); + return; +} + +/* + * Populate the key collection + */ +KeysCollection->nKeys = keys_in_list; + +for(i = 0; i < keys_in_list; i++) +{ + /* Retrieve the row infos */ + gtk_clist_get_text(GTK_CLIST(key_ls),i,0,&row_type); + gtk_clist_get_text(GTK_CLIST(key_ls),i,1,&row_key); + gtk_clist_get_text(GTK_CLIST(key_ls),i,2,&row_ssid); + + if(g_strcasecmp(row_type,AIRPCAP_WEP_KEY_STRING) == 0) + KeysCollection->Keys[i].KeyType = AIRPCAP_KEYTYPE_WEP; + else if(g_strcasecmp(row_type,AIRPCAP_WPA_KEY_STRING) == 0) + KeysCollection->Keys[i].KeyType = AIRPCAP_KEYTYPE_TKIP; + else if(g_strcasecmp(row_type,AIRPCAP_WPA2_KEY_STRING) == 0) + KeysCollection->Keys[i].KeyType = AIRPCAP_KEYTYPE_CCMP; + + /* Retrieve the Item corresponding to the i-th key */ + new_key = g_string_new(row_key); + + KeysCollection->Keys[i].KeyLen = new_key->len / 2; + memset(&KeysCollection->Keys[i].KeyData, 0, sizeof(KeysCollection->Keys[i].KeyData)); + + for(j = 0 ; j < new_key->len; j += 2) + { + s[0] = new_key->str[j]; + s[1] = new_key->str[j+1]; + s[2] = '\0'; + KeyByte = (UCHAR)strtol(s, NULL, 16); + KeysCollection->Keys[i].KeyData[j / 2] = KeyByte; + } +} + +/* + * Free the old adapter key collection! + */ +if(fake_if_info->keysCollection != NULL) + g_free(fake_if_info->keysCollection); + +/* + * Set this collection ad the new one + */ +fake_if_info->keysCollection = KeysCollection; +fake_if_info->keysCollectionSize = KeysCollectionSize; +return; +} + +/* * This function will take the current keys (widget list), specified for the * current adapter, and save them as default for ALL the others. */ @@ -642,33 +772,57 @@ airpcap_read_and_save_decryption_keys_from_clist(GtkWidget* key_ls, airpcap_if_i { gint if_n = 0; gint i = 0; +gint r = 0; +gint n = 0; airpcap_if_info_t* curr_if = NULL; +airpcap_if_info_t* fake_info_if = NULL; +GList* key_list=NULL; +char* tmp_key = NULL; + +/* + * Save the key list for driver. + */ +fake_info_if = airpcap_driver_fake_if_info_new(); + +airpcap_add_keys_to_driver_from_list(key_ls,fake_info_if); +airpcap_save_driver_if_configuration(fake_info_if); +airpcap_if_info_free(fake_info_if); if( (if_list == NULL) || (info_if == NULL) ) return; if_n = g_list_length(if_list); -/* For all the adapters in the list, save those keys as default */ +/* For all the adapters in the list, empty the key list */ for(i = 0; i < if_n; i++) { curr_if = (airpcap_if_info_t*)g_list_nth_data(if_list,i); if(curr_if != NULL) { - /* If the interface is not the active one, we need to free it's - key list and copy in the selected key list... */ - airpcap_add_keys_from_list(key_ls,curr_if); + /* XXX - Set an empty collection */ + airpcap_if_clear_decryption_settings(curr_if); /* Save to registry */ airpcap_save_selected_if_configuration(curr_if); } } - + /* Save the settings of the given interface as default for Wireshark... * By the way, now all the adapters have the same keys, so it is not * really necessary to use THIS specific one... */ -save_wlan_wep_keys(info_if); +if( (r = save_wlan_driver_wep_keys()) == 0) + { + /* Create a list of keys from the list widget... */ + n = GTK_CLIST(key_ls)->rows; + for(i = 0; i < n; i++) + { + gtk_clist_get_text(GTK_CLIST(key_ls),i,1,&tmp_key); + key_list = g_list_append(key_list,(gpointer)g_strdup(tmp_key)); + } + + r = save_wlan_wireshark_wep_keys(key_list); + } } /* @@ -689,12 +843,16 @@ airpcap_check_decryption_keys(GList* if_list) gint if_n = 0; gint i = 0; gint n_adapters_keys = 0; +gint n_driver_keys = 0; +gint n_wireshark_keys = 0; airpcap_if_info_t* curr_if = NULL; GList* wireshark_key_list; +GList* driver_key_list; GList* curr_adapter_key_list; gboolean equals = TRUE; +gboolean adapters_keys_equals=TRUE; /* * If no AirPcap interface is found, return TRUE, so Wireshark @@ -707,16 +865,26 @@ if_n = g_list_length(if_list); /* Get Wireshark preferences keys */ wireshark_key_list = get_wireshark_keys(); +n_wireshark_keys = g_list_length(wireshark_key_list); + +/* Retrieve AirPcap driver's keys */ +driver_key_list = get_airpcap_driver_keys(); +n_driver_keys = g_list_length(driver_key_list); + +equals &= key_lists_are_equal(wireshark_key_list,driver_key_list); for(i = 0; i < if_n; i++) { curr_if = (airpcap_if_info_t*)g_list_nth_data(if_list,i); curr_adapter_key_list = get_airpcap_device_keys(curr_if); n_adapters_keys += g_list_length(curr_adapter_key_list); - equals &= key_lists_are_equal(wireshark_key_list,curr_adapter_key_list); + adapters_keys_equals &= key_lists_are_equal(wireshark_key_list,curr_adapter_key_list); } -if(n_adapters_keys == 0) /* No keys set in any of the AirPcap adapters... */ +if(n_adapters_keys != 0) /* If for some reason at least one specific key has been found */ + equals &= adapters_keys_equals; /* */ + +if(n_driver_keys == 0) /* No keys set in any of the AirPcap adapters... */ return TRUE; /* Use Wireshark keys and set them ad default for airpcap devices */ return equals; @@ -748,7 +916,7 @@ if_n = g_list_length(if_list); for(i = 0; i < if_n; i++) { curr_if = (airpcap_if_info_t*)g_list_nth_data(if_list,i); - load_wlan_wep_keys(curr_if); + load_wlan_driver_wep_keys(); } } @@ -763,23 +931,28 @@ gint if_n = 0; gint key_n = 0; gint i = 0; airpcap_if_info_t* curr_if = NULL; +GList* empty_key_list = NULL; if( (key_list == NULL) || (adapters_list == NULL)) return; if_n = g_list_length(adapters_list); key_n = g_list_length(key_list); +/* Set the driver's global list of keys. */ +write_wlan_driver_wep_keys_to_regitry(key_list); + +/* Empty the key list for each interface */ for(i = 0; i < if_n; i++) { curr_if = (airpcap_if_info_t*)g_list_nth_data(adapters_list,i); - write_wlan_wep_keys_to_regitry(curr_if,key_list); + write_wlan_wep_keys_to_regitry(curr_if,empty_key_list); } /* * This will set the keys of the current adapter as Wireshark default... * Now all the adapters have the same keys, so curr_if is ok as any other... */ -save_wlan_wep_keys(curr_if); +save_wlan_driver_wep_keys(); } #endif /* HAVE_AIRPCAP */ diff --git a/gtk/airpcap_gui_utils.h b/gtk/airpcap_gui_utils.h index c953c31209..ab01366ef4 100755 --- a/gtk/airpcap_gui_utils.h +++ b/gtk/airpcap_gui_utils.h @@ -81,6 +81,12 @@ void airpcap_add_key_to_list(GtkWidget *keylist, gchar* type, gchar* key, gchar* ssid); /* + * Takes the keys from the GtkList widget, and add them to the interface list + */ +void +airpcap_add_keys_to_driver_from_list(GtkWidget *key_ls,airpcap_if_info_t *fake_if_info); + +/* * Modify a key given a list and a row */ void @@ -90,7 +96,7 @@ airpcap_modify_key_in_list(GtkWidget *keylist, gint row, gchar* type, gchar* key * Fill the list with the keys */ void -airpcap_fill_key_list(GtkWidget *keylist,airpcap_if_info_t* if_info); +airpcap_fill_key_list(GtkWidget *keylist); /* * Function used to retrieve the AirpcapValidationType given the string name. diff --git a/gtk/main.c b/gtk/main.c index 98e4896238..496fe75c94 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -2084,6 +2084,7 @@ main(int argc, char *argv[]) int status; #ifdef HAVE_AIRPCAP + int airpcap_dll_ret_val; char err_str[AIRPCAP_ERRBUF_SIZE]; gchar *cant_get_if_list_errstr; #endif @@ -2129,7 +2130,8 @@ main(int argc, char *argv[]) #ifdef HAVE_AIRPCAP /* Load the airpcap.dll. This must also be done before collecting * run-time version information. */ - if(load_airpcap()) + airpcap_dll_ret_val = load_airpcap(); + if(airpcap_dll_ret_val == AIRPCAP_DLL_OK) { /* load the airpcap interfaces */ airpcap_if_list = get_airpcap_interface_list(&err, err_str); @@ -2140,10 +2142,27 @@ main(int argc, char *argv[]) cant_get_if_list_errstr); g_free(cant_get_if_list_errstr); } - /* select the first ad default (THIS SHOULD BE CHANGED) */ airpcap_if_active = airpcap_get_default_if(airpcap_if_list); } + else if(airpcap_dll_ret_val == AIRPCAP_DLL_OLD) + { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", + "WARNING: The version of AirPcap on this system\n" + "does not support driver-level decryption. Please\n" + "download a more recent version from\n" "http://www.cacetech.com/support/downloads.htm \n"); + } + /* + * XXX - Maybe we need to warn the user if one of the following happens??? + */ +/* else if(airpcap_dll_ret_val == AIRPCAP_DLL_ERROR) + { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s","AIRPCAP_DLL_ERROR\n"); + } + else if(airpcap_dll_ret_val == AIRPCAP_DLL_NOT_FOUND) + { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s","AIRPCAP_DDL_NOT_FOUND\n"); + }*/ #endif /* Start windows sockets */ |