summaryrefslogtreecommitdiffstats
path: root/src/lockdown.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lockdown.c')
-rw-r--r--src/lockdown.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/lockdown.c b/src/lockdown.c
index 5251737..071697d 100644
--- a/src/lockdown.c
+++ b/src/lockdown.c
@@ -707,6 +707,19 @@ LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_new_with_handshake(idevi
707 } 707 }
708 free(type); 708 free(type);
709 709
710 if (device->version == 0) {
711 plist_t p_version = NULL;
712 if (lockdownd_get_value(client_loc, NULL, "ProductVersion", &p_version) == LOCKDOWN_E_SUCCESS) {
713 int vers[3] = {0, 0, 0};
714 char *s_version = NULL;
715 plist_get_string_val(p_version, &s_version);
716 if (s_version && sscanf(s_version, "%d.%d.%d", &vers[0], &vers[1], &vers[2]) >= 2) {
717 device->version = ((vers[0] & 0xFF) << 16) | ((vers[1] & 0xFF) << 8) | (vers[2] & 0xFF);
718 }
719 free(s_version);
720 }
721 }
722
710 userpref_read_pair_record(client_loc->udid, &pair_record); 723 userpref_read_pair_record(client_loc->udid, &pair_record);
711 if (pair_record) { 724 if (pair_record) {
712 pair_record_get_host_id(pair_record, &host_id); 725 pair_record_get_host_id(pair_record, &host_id);
@@ -723,18 +736,18 @@ LIBIMOBILEDEVICE_API lockdownd_error_t lockdownd_client_new_with_handshake(idevi
723 plist_free(pair_record); 736 plist_free(pair_record);
724 pair_record = NULL; 737 pair_record = NULL;
725 738
726 /* in any case, we need to validate pairing to receive trusted host status */ 739 if (device->version < 0x070000) {
727 ret = lockdownd_validate_pair(client_loc, NULL); 740 /* for older devices, we need to validate pairing to receive trusted host status */
728 741 ret = lockdownd_validate_pair(client_loc, NULL);
729 /* if not paired yet, let's do it now */ 742
730 if (LOCKDOWN_E_INVALID_HOST_ID == ret) { 743 /* if not paired yet, let's do it now */
731 free(host_id); 744 if (LOCKDOWN_E_INVALID_HOST_ID == ret) {
732 host_id = NULL; 745 free(host_id);
733 ret = lockdownd_pair(client_loc, NULL); 746 host_id = NULL;
734 if (LOCKDOWN_E_SUCCESS == ret) { 747 ret = lockdownd_pair(client_loc, NULL);
735 ret = lockdownd_validate_pair(client_loc, NULL); 748 if (LOCKDOWN_E_SUCCESS == ret) {
736 } else if (LOCKDOWN_E_PAIRING_DIALOG_RESPONSE_PENDING == ret) { 749 ret = lockdownd_validate_pair(client_loc, NULL);
737 debug_info("Device shows the pairing dialog."); 750 }
738 } 751 }
739 } 752 }
740 753