diff options
author | Nikias Bassen | 2019-01-27 05:06:51 +0100 |
---|---|---|
committer | Nikias Bassen | 2019-01-27 05:06:51 +0100 |
commit | f2ebaf2b564ca4b9e875d1b6c724bea2087b9489 (patch) | |
tree | fc0624fe8c03184b0a50cbbeb1eb2d078c34c435 | |
parent | 3100d735cf8887df1c1dc1946bc9d7ea20b27d34 (diff) | |
download | libideviceactivation-f2ebaf2b564ca4b9e875d1b6c724bea2087b9489.tar.gz libideviceactivation-f2ebaf2b564ca4b9e875d1b6c724bea2087b9489.tar.bz2 |
ideviceactivation: Check ActivationState for success if lockdownd_activate() returns no result
On older devices it might happen that lockdownd does not return any result,
neither success nor failure, when invoking lockdownd_activate(). This results
in the code to assume the operation failed.
Instead of relying on the return value of that function we query the actual
ActivationState to see if it is not "Unactivated" anymore to determine if the
activation was successful.
-rw-r--r-- | tools/ideviceactivation.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/tools/ideviceactivation.c b/tools/ideviceactivation.c index 93e6717..f7b3da6 100644 --- a/tools/ideviceactivation.c +++ b/tools/ideviceactivation.c @@ -447,9 +447,22 @@ int main(int argc, char *argv[]) } else { // activate device using lockdown if (LOCKDOWN_E_SUCCESS != lockdownd_activate(lockdown, record)) { - fprintf(stderr, "Failed to activate device with record.\n"); - result = EXIT_FAILURE; - goto cleanup; + plist_t state = NULL; + lockdownd_get_value(lockdown, NULL, "ActivationState", &state); + int success = 0; + if (state && plist_get_node_type(state) == PLIST_STRING) { + char *strval = NULL; + plist_get_string_val(state, &strval); + if (strval && strcmp(strval, "Unactivated")) { + success = 1; + } + free(strval); + } + if (!success) { + fprintf(stderr, "Failed to activate device with record.\n"); + result = EXIT_FAILURE; + goto cleanup; + } } } |