summaryrefslogtreecommitdiff
path: root/monitor
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2013-09-18 14:48:22 +0200
committerOndrej Holy <oholy@redhat.com>2014-04-16 13:06:30 +0200
commit57e9a7f28aac02d8f27ef15d76440a0aa4dd2973 (patch)
treef57cb785b42e4514d794435e1097b9b9cf7ef9b8 /monitor
parentcce606379c3ebd3f8bf8c5a602a7b34a0d84e087 (diff)
downloadgvfs-57e9a7f28aac02d8f27ef15d76440a0aa4dd2973.tar.gz
afc: Check for iOS >= 3.1.2 to enable house arrest
https://bugzilla.gnome.org/show_bug.cgi?id=676187
Diffstat (limited to 'monitor')
-rw-r--r--monitor/afc/afcvolume.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/monitor/afc/afcvolume.c b/monitor/afc/afcvolume.c
index c8a4f853..ae2c4d2b 100644
--- a/monitor/afc/afcvolume.c
+++ b/monitor/afc/afcvolume.c
@@ -6,6 +6,8 @@
#include <config.h>
#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
#include <glib.h>
#include <gio/gio.h>
#include <glib/gi18n.h>
@@ -71,6 +73,52 @@ g_vfs_afc_volume_class_init (GVfsAfcVolumeClass *klass)
gobject_class->finalize = g_vfs_afc_volume_finalize;
}
+static gboolean
+_g_vfs_afc_volume_check_house_arrest_version (lockdownd_client_t lockdown_cli)
+{
+ plist_t value;
+ lockdownd_error_t lerr;
+ gboolean retval;
+
+ value = NULL;
+ retval = FALSE;
+
+ lerr = lockdownd_get_value (lockdown_cli, NULL, "ProductVersion", &value);
+ if (G_LIKELY(lerr == LOCKDOWN_E_SUCCESS))
+ {
+ if (plist_get_node_type(value) == PLIST_STRING)
+ {
+ char *version_string = NULL;
+
+ plist_get_string_val(value, &version_string);
+ if (version_string)
+ {
+ /* parse version */
+ int maj = 0;
+ int min = 0;
+ int rev = 0;
+
+ sscanf(version_string, "%d.%d.%d", &maj, &min, &rev);
+ free(version_string);
+
+ if (maj > 3)
+ {
+ retval = TRUE;
+ }
+ else if (maj == 3)
+ {
+ if (min > 1)
+ retval = TRUE;
+ if (min == 1 && rev >= 2)
+ retval = TRUE;
+ }
+ }
+ }
+ }
+
+ return retval;
+}
+
static int
_g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
{
@@ -101,6 +149,12 @@ _g_vfs_afc_volume_update_metadata (GVfsAfcVolume *self)
idevice_free (dev);
return 0;
}
+ if (!_g_vfs_afc_volume_check_house_arrest_version (lockdown_cli))
+ {
+ lockdownd_service_descriptor_free (lockdown_service);
+ idevice_free (dev);
+ return 0;
+ }
lerr = lockdownd_start_service(lockdown_cli, "com.apple.mobile.house_arrest", &lockdown_service);
lockdownd_service_descriptor_free (lockdown_service);
if (lerr != LOCKDOWN_E_SUCCESS)