summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/preflight.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/preflight.c b/src/preflight.c
index e58a2d6..6a303c2 100644
--- a/src/preflight.c
+++ b/src/preflight.c
@@ -148,6 +148,7 @@ static void* preflight_worker_handle_device_add(void* userdata)
148 148
149 plist_t value = NULL; 149 plist_t value = NULL;
150 char* version_str = NULL; 150 char* version_str = NULL;
151 char* platform_str = NULL;
151 152
152 usbmuxd_log(LL_INFO, "%s: Starting preflight on device %s...", __func__, _dev->udid); 153 usbmuxd_log(LL_INFO, "%s: Starting preflight on device %s...", __func__, _dev->udid);
153 154
@@ -220,16 +221,35 @@ retry:
220 if (value && plist_get_node_type(value) == PLIST_STRING) { 221 if (value && plist_get_node_type(value) == PLIST_STRING) {
221 plist_get_string_val(value, &version_str); 222 plist_get_string_val(value, &version_str);
222 } 223 }
224 plist_free(value);
223 225
224 if (!version_str) { 226 if (!version_str) {
225 usbmuxd_log(LL_ERROR, "%s: Could not get ProductVersion string from device %s handle %d", __func__, _dev->udid, (int)(long)_dev->conn_data); 227 usbmuxd_log(LL_ERROR, "%s: Could not get ProductVersion string from device %s handle %d", __func__, _dev->udid, (int)(long)_dev->conn_data);
226 goto leave; 228 goto leave;
227 } 229 }
228 230
231 lerr = lockdownd_get_value(lockdown, NULL, "ProductName", &value);
232 if (lerr != LOCKDOWN_E_SUCCESS) {
233 usbmuxd_log(LL_ERROR, "%s: ERROR: Could not get ProductName from device %s, lockdown error %d", __func__, _dev->udid, lerr);
234 goto leave;
235 }
236 if (value && plist_get_node_type(value) == PLIST_STRING) {
237 plist_get_string_val(value, &platform_str);
238 }
239 plist_free(value);
240
241 if (!platform_str) {
242 usbmuxd_log(LL_ERROR, "%s: Could not get ProductName string from device %s handle %d", __func__, _dev->udid, (int)(long)_dev->conn_data);
243 goto leave;
244 }
245
229 int version_major = strtol(version_str, NULL, 10); 246 int version_major = strtol(version_str, NULL, 10);
230 if (version_major >= 7) { 247 if ((!strcmp(platform_str, "iPhone OS") && version_major >= 7)
231 /* iOS 7.0 and later */ 248 || ((!strcmp(platform_str, "watchOS") || !strcmp(platform_str, "Watch OS")) && version_major >= 2)
232 usbmuxd_log(LL_INFO, "%s: Found ProductVersion %s device %s", __func__, version_str, _dev->udid); 249 || (!strcmp(platform_str, "Apple TVOS") && version_major >= 9)
250 ) {
251 /* iOS 7.0 / watchOS 2.0 / tvOS 9.0 and later */
252 usbmuxd_log(LL_INFO, "%s: Found %s %s device %s", __func__, platform_str, version_str, _dev->udid);
233 253
234 lockdownd_set_untrusted_host_buid(lockdown); 254 lockdownd_set_untrusted_host_buid(lockdown);
235 255
@@ -336,10 +356,8 @@ retry:
336 } 356 }
337 357
338leave: 358leave:
339 if (value) 359 free(platform_str);
340 plist_free(value); 360 free(version_str);
341 if (version_str)
342 free(version_str);
343 if (lockdown) 361 if (lockdown)
344 lockdownd_client_free(lockdown); 362 lockdownd_client_free(lockdown);
345 if (dev) 363 if (dev)