diff options
Diffstat (limited to 'src/lockdown.c')
-rw-r--r-- | src/lockdown.c | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/src/lockdown.c b/src/lockdown.c index 49f757c..159f741 100644 --- a/src/lockdown.c +++ b/src/lockdown.c | |||
@@ -697,7 +697,12 @@ LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_new_with_handshake(idevi | |||
697 | plist_free(p_version); | 697 | plist_free(p_version); |
698 | } | 698 | } |
699 | 699 | ||
700 | userpref_read_pair_record(client_loc->udid, &pair_record); | 700 | userpref_error_t uerr = userpref_read_pair_record(client_loc->udid, &pair_record); |
701 | if (uerr == USERPREF_E_READ_ERROR) { | ||
702 | debug_info("ERROR: Failed to retrieve pair record for %s", client_loc->udid); | ||
703 | lockdownd_client_free(client_loc); | ||
704 | return LOCKDOWN_E_RECEIVE_TIMEOUT; | ||
705 | } | ||
701 | if (pair_record) { | 706 | if (pair_record) { |
702 | pair_record_get_host_id(pair_record, &host_id); | 707 | pair_record_get_host_id(pair_record, &host_id); |
703 | } | 708 | } |
@@ -707,6 +712,8 @@ LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_new_with_handshake(idevi | |||
707 | 712 | ||
708 | if (LOCKDOWN_E_SUCCESS == ret && !pair_record) { | 713 | if (LOCKDOWN_E_SUCCESS == ret && !pair_record) { |
709 | /* attempt pairing */ | 714 | /* attempt pairing */ |
715 | free(host_id); | ||
716 | host_id = NULL; | ||
710 | ret = lockdownd_pair(client_loc, NULL); | 717 | ret = lockdownd_pair(client_loc, NULL); |
711 | } | 718 | } |
712 | 719 | ||
@@ -730,7 +737,17 @@ LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_new_with_handshake(idevi | |||
730 | 737 | ||
731 | if (LOCKDOWN_E_SUCCESS == ret) { | 738 | if (LOCKDOWN_E_SUCCESS == ret) { |
732 | if (!host_id) { | 739 | if (!host_id) { |
733 | userpref_read_pair_record(client_loc->udid, &pair_record); | 740 | uerr = userpref_read_pair_record(client_loc->udid, &pair_record); |
741 | if (uerr == USERPREF_E_READ_ERROR) { | ||
742 | debug_info("ERROR: Failed to retrieve pair record for %s", client_loc->udid); | ||
743 | return LOCKDOWN_E_RECEIVE_TIMEOUT; | ||
744 | } else if (uerr == USERPREF_E_NOENT) { | ||
745 | debug_info("ERROR: No pair record for %s", client_loc->udid); | ||
746 | return LOCKDOWN_E_INVALID_CONF; | ||
747 | } else if (uerr != USERPREF_E_SUCCESS) { | ||
748 | debug_info("ERROR: Failed to retrieve or parse pair record for %s", client_loc->udid); | ||
749 | return LOCKDOWN_E_INVALID_CONF; | ||
750 | } | ||
734 | if (pair_record) { | 751 | if (pair_record) { |
735 | pair_record_get_host_id(pair_record, &host_id); | 752 | pair_record_get_host_id(pair_record, &host_id); |
736 | plist_free(pair_record); | 753 | plist_free(pair_record); |
@@ -894,9 +911,16 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ | |||
894 | lockdownd_get_value(client, NULL, "WiFiAddress", &wifi_node); | 911 | lockdownd_get_value(client, NULL, "WiFiAddress", &wifi_node); |
895 | } else { | 912 | } else { |
896 | /* use existing pair record */ | 913 | /* use existing pair record */ |
897 | userpref_read_pair_record(client->udid, &pair_record_plist); | 914 | userpref_error_t uerr = userpref_read_pair_record(client->udid, &pair_record_plist); |
898 | if (!pair_record_plist) { | 915 | if (uerr == USERPREF_E_READ_ERROR) { |
899 | return LOCKDOWN_E_INVALID_HOST_ID; | 916 | debug_info("ERROR: Failed to retrieve pair record for %s", client->udid); |
917 | return LOCKDOWN_E_RECEIVE_TIMEOUT; | ||
918 | } else if (uerr == USERPREF_E_NOENT) { | ||
919 | debug_info("ERROR: No pair record for %s", client->udid); | ||
920 | return LOCKDOWN_E_INVALID_CONF; | ||
921 | } else if (uerr != USERPREF_E_SUCCESS) { | ||
922 | debug_info("ERROR: Failed to retrieve or parse pair record for %s", client->udid); | ||
923 | return LOCKDOWN_E_INVALID_CONF; | ||
900 | } | 924 | } |
901 | } | 925 | } |
902 | } | 926 | } |
@@ -1226,9 +1250,17 @@ static lockdownd_error_t lockdownd_build_start_service_request(lockdownd_client_ | |||
1226 | if (send_escrow_bag) { | 1250 | if (send_escrow_bag) { |
1227 | /* get the pairing record */ | 1251 | /* get the pairing record */ |
1228 | plist_t pair_record = NULL; | 1252 | plist_t pair_record = NULL; |
1229 | userpref_read_pair_record(client->udid, &pair_record); | 1253 | userpref_error_t uerr = userpref_read_pair_record(client->udid, &pair_record); |
1230 | if (!pair_record) { | 1254 | if (uerr == USERPREF_E_READ_ERROR) { |
1231 | debug_info("ERROR: failed to read pair record for device: %s", client->udid); | 1255 | debug_info("ERROR: Failed to retrieve pair record for %s", client->udid); |
1256 | plist_free(dict); | ||
1257 | return LOCKDOWN_E_RECEIVE_TIMEOUT; | ||
1258 | } else if (uerr == USERPREF_E_NOENT) { | ||
1259 | debug_info("ERROR: No pair record for %s", client->udid); | ||
1260 | plist_free(dict); | ||
1261 | return LOCKDOWN_E_INVALID_CONF; | ||
1262 | } else if (uerr != USERPREF_E_SUCCESS) { | ||
1263 | debug_info("ERROR: Failed to retrieve or parse pair record for %s", client->udid); | ||
1232 | plist_free(dict); | 1264 | plist_free(dict); |
1233 | return LOCKDOWN_E_INVALID_CONF; | 1265 | return LOCKDOWN_E_INVALID_CONF; |
1234 | } | 1266 | } |