diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/preflight.c | 32 |
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 | ||
338 | leave: | 358 | leave: |
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) |