summaryrefslogtreecommitdiffstats
path: root/src/preflight.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2019-10-04 03:14:04 +0200
committerGravatar Nikias Bassen2019-10-04 03:14:04 +0200
commitc41226df521de464a89f3d027f3e67d13d10d96f (patch)
tree585c80e88a56f35c022f85a759b9e775bad11733 /src/preflight.c
parent1afa7350f9da03365f3b8f98dcb763b396e52723 (diff)
downloadusbmuxd-c41226df521de464a89f3d027f3e67d13d10d96f.tar.gz
usbmuxd-c41226df521de464a89f3d027f3e67d13d10d96f.tar.bz2
preflight: Let insecure notification proxy terminate when pairing is done
Diffstat (limited to 'src/preflight.c')
-rw-r--r--src/preflight.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/preflight.c b/src/preflight.c
index 15429c0..f46786e 100644
--- a/src/preflight.c
+++ b/src/preflight.c
@@ -59,6 +59,7 @@ struct cb_data {
59 idevice_t dev; 59 idevice_t dev;
60 np_client_t np; 60 np_client_t np;
61 int is_device_connected; 61 int is_device_connected;
62 int is_finished;
62}; 63};
63 64
64static void lockdownd_set_untrusted_host_buid(lockdownd_client_t lockdown) 65static void lockdownd_set_untrusted_host_buid(lockdownd_client_t lockdown)
@@ -97,6 +98,7 @@ static void np_callback(const char* notification, void* userdata)
97 lerr = lockdownd_client_new(dev, &lockdown, "usbmuxd"); 98 lerr = lockdownd_client_new(dev, &lockdown, "usbmuxd");
98 if (lerr != LOCKDOWN_E_SUCCESS) { 99 if (lerr != LOCKDOWN_E_SUCCESS) {
99 usbmuxd_log(LL_ERROR, "%s: ERROR: Could not connect to lockdownd on device %s, lockdown error %d", __func__, _dev->udid, lerr); 100 usbmuxd_log(LL_ERROR, "%s: ERROR: Could not connect to lockdownd on device %s, lockdown error %d", __func__, _dev->udid, lerr);
101 cbdata->is_finished = 1;
100 return; 102 return;
101 } 103 }
102 104
@@ -104,10 +106,11 @@ static void np_callback(const char* notification, void* userdata)
104 if (lerr != LOCKDOWN_E_SUCCESS) { 106 if (lerr != LOCKDOWN_E_SUCCESS) {
105 usbmuxd_log(LL_ERROR, "%s: ERROR: Pair failed for device %s, lockdown error %d", __func__, _dev->udid, lerr); 107 usbmuxd_log(LL_ERROR, "%s: ERROR: Pair failed for device %s, lockdown error %d", __func__, _dev->udid, lerr);
106 lockdownd_client_free(lockdown); 108 lockdownd_client_free(lockdown);
109 cbdata->is_finished = 1;
107 return; 110 return;
108 } 111 }
109 lockdownd_client_free(lockdown); 112 lockdownd_client_free(lockdown);
110 // device will reconnect by itself at this point. 113 cbdata->is_finished = 1;
111 114
112 } else if (strcmp(notification, "com.apple.mobile.lockdown.request_host_buid") == 0) { 115 } else if (strcmp(notification, "com.apple.mobile.lockdown.request_host_buid") == 0) {
113 lerr = lockdownd_client_new(cbdata->dev, &lockdown, "usbmuxd"); 116 lerr = lockdownd_client_new(cbdata->dev, &lockdown, "usbmuxd");
@@ -255,6 +258,7 @@ retry:
255 cbdata.dev = dev; 258 cbdata.dev = dev;
256 cbdata.np = np; 259 cbdata.np = np;
257 cbdata.is_device_connected = 1; 260 cbdata.is_device_connected = 1;
261 cbdata.is_finished = 0;
258 262
259 np_set_notify_callback(np, np_callback, (void*)&cbdata); 263 np_set_notify_callback(np, np_callback, (void*)&cbdata);
260 device_set_preflight_cb_data(info->id, (void*)&cbdata); 264 device_set_preflight_cb_data(info->id, (void*)&cbdata);
@@ -273,7 +277,7 @@ retry:
273 /* make device visible anyways */ 277 /* make device visible anyways */
274 client_device_add(info); 278 client_device_add(info);
275 279
276 while (cbdata.np && cbdata.is_device_connected == 1) { 280 while (cbdata.np && cbdata.is_device_connected && !cbdata.is_finished) {
277 sleep(1); 281 sleep(1);
278 } 282 }
279 device_set_preflight_cb_data(info->id, NULL); 283 device_set_preflight_cb_data(info->id, NULL);