From 1959bdaa9d847dab689757643bb94c52afe0716a Mon Sep 17 00:00:00 2001 From: Martin Szulecki Date: Fri, 21 Mar 2014 21:47:55 +0100 Subject: lockdown: Fix fetching WiFi address for pair record after trust dialog pairing --- src/lockdown.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/lockdown.c b/src/lockdown.c index 3c8fb80..984f1e0 100644 --- a/src/lockdown.c +++ b/src/lockdown.c @@ -918,6 +918,7 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; plist_t dict = NULL; plist_t pair_record_plist = NULL; + plist_t wifi_node = NULL; int pairing_mode = 0; /* 0 = libimobiledevice, 1 = external */ if (pair_record && pair_record->system_buid && pair_record->host_id) { @@ -940,6 +941,9 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ plist_free(pair_record_plist); return ret; } + + /* get wifi mac now, if we get it later we fail on iOS 7 which causes a reconnect */ + lockdownd_get_value(client, NULL, "WiFiAddress", &wifi_node); } else { /* use existing pair record */ if (userpref_has_pair_record(client->udid)) { @@ -974,6 +978,8 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ if (ret != LOCKDOWN_E_SUCCESS) { plist_free(pair_record_plist); + if (wifi_node) + plist_free(wifi_node); return ret; } @@ -982,6 +988,8 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ if (ret != LOCKDOWN_E_SUCCESS) { plist_free(pair_record_plist); + if (wifi_node) + plist_free(wifi_node); return ret; } @@ -1007,26 +1015,21 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ userpref_delete_pair_record(client->udid); } else { if (!strcmp("Pair", verb)) { - debug_info("Saving EscrowBag from response in pair record"); - /* add returned escrow bag if available */ plist_t extra_node = plist_dict_get_item(dict, USERPREF_ESCROW_BAG_KEY); if (extra_node && plist_get_node_type(extra_node) == PLIST_DATA) { + debug_info("Saving EscrowBag from response in pair record"); plist_dict_set_item(pair_record_plist, USERPREF_ESCROW_BAG_KEY, plist_copy(extra_node)); plist_free(extra_node); extra_node = NULL; } - debug_info("Saving WiFiAddress from device in pair record"); - - /* get wifi mac */ - lockdownd_get_value(client, NULL, "WiFiAddress", &extra_node); - - /* save wifi mac address in config */ - if (extra_node) { - plist_dict_set_item(pair_record_plist, USERPREF_WIFI_MAC_ADDRESS_KEY, plist_copy(extra_node)); - plist_free(extra_node); - extra_node = NULL; + /* save previously retrieved wifi mac address in pair record */ + if (wifi_node) { + debug_info("Saving WiFiAddress from device in pair record"); + plist_dict_set_item(pair_record_plist, USERPREF_WIFI_MAC_ADDRESS_KEY, plist_copy(wifi_node)); + plist_free(wifi_node); + wifi_node = NULL; } userpref_save_pair_record(client->udid, pair_record_plist); @@ -1067,6 +1070,11 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ pair_record_plist = NULL; } + if (wifi_node) { + plist_free(wifi_node); + wifi_node = NULL; + } + plist_free(dict); dict = NULL; -- cgit v1.1-32-gdbae