diff options
author | Martin Szulecki | 2010-05-28 17:48:20 +0200 |
---|---|---|
committer | Martin Szulecki | 2010-05-28 17:48:20 +0200 |
commit | e2f7363821664daf1872b6d12e8410216b429d93 (patch) | |
tree | 1b37482f33216125d8a28bf61fd7fc556b5649bd /src | |
parent | e4342e811b2233c1c5f859efa83af80c266ba83f (diff) | |
download | libimobiledevice-e2f7363821664daf1872b6d12e8410216b429d93.tar.gz libimobiledevice-e2f7363821664daf1872b6d12e8410216b429d93.tar.bz2 |
Add special handling for unpair request; probably a bug in the iPhone OS
Diffstat (limited to 'src')
-rw-r--r-- | src/lockdown.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/lockdown.c b/src/lockdown.c index d91a066..ab49a6a 100644 --- a/src/lockdown.c +++ b/src/lockdown.c @@ -54,7 +54,8 @@ const ASN1_ARRAY_TYPE pkcs1_asn1_tab[] = { * plist to a previously sent request. * * @param dict The plist to evaluate. - * @param query_match Name of the request to match. + * @param query_match Name of the request to match or NULL if no match is + * required. * * @return RESULT_SUCCESS when the result is 'Success', * RESULT_FAILURE when the result is 'Failure', @@ -76,7 +77,7 @@ static int lockdown_check_result(plist_t dict, const char *query_match) if (!query_value) { return ret; } - if (strcmp(query_value, query_match) != 0) { + if (query_match && (strcmp(query_value, query_match) != 0)) { free(query_value); return ret; } @@ -876,8 +877,16 @@ static lockdownd_error_t lockdownd_do_pair(lockdownd_client_t client, lockdownd_ if (ret != LOCKDOWN_E_SUCCESS) return ret; - if (lockdown_check_result(dict, verb) != RESULT_SUCCESS) { - ret = LOCKDOWN_E_PAIRING_FAILED; + if (strcmp(verb, "Unpair") == 0) { + /* workaround for Unpair giving back ValidatePair, + * seems to be a bug in the device's fw */ + if (lockdown_check_result(dict, NULL) != RESULT_SUCCESS) { + ret = LOCKDOWN_E_PAIRING_FAILED; + } + } else { + if (lockdown_check_result(dict, verb) != RESULT_SUCCESS) { + ret = LOCKDOWN_E_PAIRING_FAILED; + } } /* if pairing succeeded */ |