summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2013-09-24 03:46:22 +0200
committerGravatar Nikias Bassen2013-09-24 03:46:22 +0200
commit4356659dfad264fb89bfcf0e4410797db4e908a8 (patch)
tree403f48351bc28c2b82d67c73112a7df0015162a4
parent6b42686e8addecf76beaa171427a81fd65c6a895 (diff)
downloadusbmuxd-4356659dfad264fb89bfcf0e4410797db4e908a8.tar.gz
usbmuxd-4356659dfad264fb89bfcf0e4410797db4e908a8.tar.bz2
preflight: handle invalid pair records properly
-rw-r--r--src/preflight.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/preflight.c b/src/preflight.c
index 30a2217..97fdb8b 100644
--- a/src/preflight.c
+++ b/src/preflight.c
@@ -115,9 +115,10 @@ static void* preflight_worker_handle_device_add(void* userdata)
115 115
116 idevice_t dev = (idevice_t)_dev; 116 idevice_t dev = (idevice_t)_dev;
117 117
118 lockdownd_client_t lockdown; 118 lockdownd_client_t lockdown = NULL;
119 lockdownd_error_t lerr; 119 lockdownd_error_t lerr;
120 120
121retry:
121 lerr = lockdownd_client_new(dev, &lockdown, "usbmuxd"); 122 lerr = lockdownd_client_new(dev, &lockdown, "usbmuxd");
122 if (lerr != LOCKDOWN_E_SUCCESS) { 123 if (lerr != LOCKDOWN_E_SUCCESS) {
123 usbmuxd_log(LL_ERROR, "%s: ERROR: Could not connect to lockdownd on device %s, lockdown error %d", __func__, _dev->udid, lerr); 124 usbmuxd_log(LL_ERROR, "%s: ERROR: Could not connect to lockdownd on device %s, lockdown error %d", __func__, _dev->udid, lerr);
@@ -149,10 +150,23 @@ static void* preflight_worker_handle_device_add(void* userdata)
149 } 150 }
150 151
151 usbmuxd_log(LL_INFO, "%s: StartSession failed on device %s, lockdown error %d", __func__, _dev->udid, lerr); 152 usbmuxd_log(LL_INFO, "%s: StartSession failed on device %s, lockdown error %d", __func__, _dev->udid, lerr);
152 if (lerr == LOCKDOWN_E_INVALID_HOST_ID) { 153 switch (lerr) {
154 case LOCKDOWN_E_INVALID_HOST_ID:
153 usbmuxd_log(LL_INFO, "%s: Device %s is not paired with this host.", __func__, _dev->udid); 155 usbmuxd_log(LL_INFO, "%s: Device %s is not paired with this host.", __func__, _dev->udid);
154 } else { 156 break;
157 case LOCKDOWN_E_SSL_ERROR:
158 usbmuxd_log(LL_ERROR, "%s: The stored pair record for device %s is invalid. Removing.", __func__, _dev->udid);
159 if (userpref_remove_device_record(_dev->udid) == 0) {
160 lockdownd_client_free(lockdown);
161 lockdown = NULL;
162 goto retry;
163 } else {
164 usbmuxd_log(LL_ERROR, "%s: Could not remove pair record for device %s\n", __func__, _dev->udid);
165 }
166 break;
167 default:
155 is_device_paired = 1; 168 is_device_paired = 1;
169 break;
156 } 170 }
157 171
158 plist_t value = NULL; 172 plist_t value = NULL;