diff options
| author | 2014-03-21 21:47:55 +0100 | |
|---|---|---|
| committer | 2014-03-21 21:47:55 +0100 | |
| commit | 1959bdaa9d847dab689757643bb94c52afe0716a (patch) | |
| tree | f1da7edd628638394f67c033aeacf4f0bb52a6b1 | |
| parent | daf3b235f4f04c21b2765f61db7ae56ff9cdb6ba (diff) | |
| download | libimobiledevice-1959bdaa9d847dab689757643bb94c52afe0716a.tar.gz libimobiledevice-1959bdaa9d847dab689757643bb94c52afe0716a.tar.bz2 | |
lockdown: Fix fetching WiFi address for pair record after trust dialog pairing
| -rw-r--r-- | src/lockdown.c | 32 |
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 | ||
