summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/idevice.c6
-rw-r--r--src/lockdown.c48
2 files changed, 43 insertions, 11 deletions
diff --git a/src/idevice.c b/src/idevice.c
index 5b9c1ac..08a8b31 100644
--- a/src/idevice.c
+++ b/src/idevice.c
@@ -1069,9 +1069,9 @@ LIBIMOBILEDEVICE_API idevice_error_t idevice_connection_enable_ssl(idevice_conne
1069 idevice_error_t ret = IDEVICE_E_SSL_ERROR; 1069 idevice_error_t ret = IDEVICE_E_SSL_ERROR;
1070 plist_t pair_record = NULL; 1070 plist_t pair_record = NULL;
1071 1071
1072 userpref_read_pair_record(connection->device->udid, &pair_record); 1072 userpref_error_t uerr = userpref_read_pair_record(connection->device->udid, &pair_record);
1073 if (!pair_record) { 1073 if (uerr != USERPREF_E_SUCCESS) {
1074 debug_info("ERROR: Failed enabling SSL. Unable to read pair record for udid %s.", connection->device->udid); 1074 debug_info("ERROR: Failed enabling SSL. Unable to read pair record for udid %s (%d)", connection->device->udid, uerr);
1075 return ret; 1075 return ret;
1076 } 1076 }
1077 1077
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 }