diff options
| author | 2021-08-30 19:06:28 +0200 | |
|---|---|---|
| committer | 2021-08-30 19:06:28 +0200 | |
| commit | 9cf3e5a619a568384d729c5b095f43624db281b9 (patch) | |
| tree | c62a8d9e4facca7d5bd78205b05a181515854336 /src | |
| parent | 160046305f9c6e4e3e84699d7c61d59c5d87ea0b (diff) | |
| download | usbmuxd-9cf3e5a619a568384d729c5b095f43624db281b9.tar.gz usbmuxd-9cf3e5a619a568384d729c5b095f43624db281b9.tar.bz2 | |
preflight: Check platform before attempting to preflight
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) |
