summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lockdown.c32
1 files 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_
918 lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR; 918 lockdownd_error_t ret = LOCKDOWN_E_UNKNOWN_ERROR;
919 plist_t dict = NULL; 919 plist_t dict = NULL;
920 plist_t pair_record_plist = NULL; 920 plist_t pair_record_plist = NULL;
921 plist_t wifi_node = NULL;
921 int pairing_mode = 0; /* 0 = libimobiledevice, 1 = external */ 922 int pairing_mode = 0; /* 0 = libimobiledevice, 1 = external */
922 923
923 if (pair_record && pair_record->system_buid && pair_record->host_id) { 924 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_
940 plist_free(pair_record_plist); 941 plist_free(pair_record_plist);
941 return ret; 942 return ret;
942 } 943 }
944
945 /* get wifi mac now, if we get it later we fail on iOS 7 which causes a reconnect */
946 lockdownd_get_value(client, NULL, "WiFiAddress", &wifi_node);
943 } else { 947 } else {
944 /* use existing pair record */ 948 /* use existing pair record */
945 if (userpref_has_pair_record(client->udid)) { 949 if (userpref_has_pair_record(client->udid)) {
@@ -974,6 +978,8 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_
974 978
975 if (ret != LOCKDOWN_E_SUCCESS) { 979 if (ret != LOCKDOWN_E_SUCCESS) {
976 plist_free(pair_record_plist); 980 plist_free(pair_record_plist);
981 if (wifi_node)
982 plist_free(wifi_node);
977 return ret; 983 return ret;
978 } 984 }
979 985
@@ -982,6 +988,8 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_
982 988
983 if (ret != LOCKDOWN_E_SUCCESS) { 989 if (ret != LOCKDOWN_E_SUCCESS) {
984 plist_free(pair_record_plist); 990 plist_free(pair_record_plist);
991 if (wifi_node)
992 plist_free(wifi_node);
985 return ret; 993 return ret;
986 } 994 }
987 995
@@ -1007,26 +1015,21 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_
1007 userpref_delete_pair_record(client->udid); 1015 userpref_delete_pair_record(client->udid);
1008 } else { 1016 } else {
1009 if (!strcmp("Pair", verb)) { 1017 if (!strcmp("Pair", verb)) {
1010 debug_info("Saving EscrowBag from response in pair record");
1011
1012 /* add returned escrow bag if available */ 1018 /* add returned escrow bag if available */
1013 plist_t extra_node = plist_dict_get_item(dict, USERPREF_ESCROW_BAG_KEY); 1019 plist_t extra_node = plist_dict_get_item(dict, USERPREF_ESCROW_BAG_KEY);
1014 if (extra_node && plist_get_node_type(extra_node) == PLIST_DATA) { 1020 if (extra_node && plist_get_node_type(extra_node) == PLIST_DATA) {
1021 debug_info("Saving EscrowBag from response in pair record");
1015 plist_dict_set_item(pair_record_plist, USERPREF_ESCROW_BAG_KEY, plist_copy(extra_node)); 1022 plist_dict_set_item(pair_record_plist, USERPREF_ESCROW_BAG_KEY, plist_copy(extra_node));
1016 plist_free(extra_node); 1023 plist_free(extra_node);
1017 extra_node = NULL; 1024 extra_node = NULL;
1018 } 1025 }
1019 1026
1020 debug_info("Saving WiFiAddress from device in pair record"); 1027 /* save previously retrieved wifi mac address in pair record */
1021 1028 if (wifi_node) {
1022 /* get wifi mac */ 1029 debug_info("Saving WiFiAddress from device in pair record");
1023 lockdownd_get_value(client, NULL, "WiFiAddress", &extra_node); 1030 plist_dict_set_item(pair_record_plist, USERPREF_WIFI_MAC_ADDRESS_KEY, plist_copy(wifi_node));
1024 1031 plist_free(wifi_node);
1025 /* save wifi mac address in config */ 1032 wifi_node = NULL;
1026 if (extra_node) {
1027 plist_dict_set_item(pair_record_plist, USERPREF_WIFI_MAC_ADDRESS_KEY, plist_copy(extra_node));
1028 plist_free(extra_node);
1029 extra_node = NULL;
1030 } 1033 }
1031 1034
1032 userpref_save_pair_record(client->udid, pair_record_plist); 1035 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_
1067 pair_record_plist = NULL; 1070 pair_record_plist = NULL;
1068 } 1071 }
1069 1072
1073 if (wifi_node) {
1074 plist_free(wifi_node);
1075 wifi_node = NULL;
1076 }
1077
1070 plist_free(dict); 1078 plist_free(dict);
1071 dict = NULL; 1079 dict = NULL;
1072 1080