diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ifuse.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/ifuse.c b/src/ifuse.c index e3b46bf..c7aa01b 100644 --- a/src/ifuse.c +++ b/src/ifuse.c @@ -69,6 +69,7 @@ static struct { char *device_udid; #ifdef HAVE_LIBIMOBILEDEVICE_1_1 char *appid; + int use_container; #endif char *service_name; #ifdef HAVE_LIBIMOBILEDEVICE_1_1_5 @@ -84,8 +85,8 @@ enum { KEY_ROOT, KEY_UDID, KEY_UDID_LONG, - KEY_APPID, - KEY_APPID_LONG, + KEY_VENDOR_DOCUMENTS_LONG, + KEY_VENDOR_CONTAINER_LONG, KEY_DEBUG, KEY_DEBUG_LONG }; @@ -101,8 +102,8 @@ static struct fuse_opt ifuse_opts[] = { FUSE_OPT_KEY("-d", KEY_DEBUG), FUSE_OPT_KEY("--debug", KEY_DEBUG_LONG), #ifdef HAVE_LIBIMOBILEDEVICE_1_1 - FUSE_OPT_KEY("-a %s", KEY_APPID), - FUSE_OPT_KEY("--appid %s", KEY_APPID_LONG), + FUSE_OPT_KEY("--documents %s", KEY_VENDOR_DOCUMENTS_LONG), + FUSE_OPT_KEY("--container %s", KEY_VENDOR_CONTAINER_LONG), #endif FUSE_OPT_END }; @@ -634,7 +635,8 @@ static void print_usage() fprintf(stderr, " -V, --version\t\tprint version\n"); fprintf(stderr, " -d, --debug\t\tenable libimobiledevice communication debugging\n"); #ifdef HAVE_LIBIMOBILEDEVICE_1_1 - fprintf(stderr, " --appid APPID\t\tmount 'Documents' folder of app identified by APPID\n"); + fprintf(stderr, " --documents APPID\tmount 'Documents' folder of app identified by APPID\n"); + fprintf(stderr, " --container APPID\tmount sandbox root of an app identified by APPID\n"); #endif fprintf(stderr, " --root\t\tmount root file system (jailbroken device required)\n"); fprintf(stderr, "\n"); @@ -660,13 +662,14 @@ static int ifuse_opt_proc(void *data, const char *arg, int key, struct fuse_args res = 0; break; #ifdef HAVE_LIBIMOBILEDEVICE_1_1 - case KEY_APPID_LONG: - opts.appid = strdup(arg+7); + case KEY_VENDOR_CONTAINER_LONG: + opts.use_container = 1; + opts.appid = strdup(arg+11); opts.service_name = HOUSE_ARREST_SERVICE_NAME; res = 0; break; - case KEY_APPID: - opts.appid = strdup(arg+2); + case KEY_VENDOR_DOCUMENTS_LONG: + opts.appid = strdup(arg+11); opts.service_name = HOUSE_ARREST_SERVICE_NAME; res = 0; break; @@ -793,8 +796,10 @@ int main(int argc, char *argv[]) fprintf(stderr, "Could not start document sharing service!\n"); return EXIT_FAILURE; } - if (house_arrest_send_command(house_arrest, "VendContainer", opts.appid) != HOUSE_ARREST_E_SUCCESS) { - fprintf(stderr, "Could not send VendContainer command!\n"); + + /* FIXME: iOS 3.x house_arrest does not know about VendDocuments yet, thus use VendContainer and chroot manually with fuse subdir module */ + if (house_arrest_send_command(house_arrest, opts.use_container ? "VendContainer": "VendDocuments", opts.appid) != HOUSE_ARREST_E_SUCCESS) { + fprintf(stderr, "Could not send house_arrest command!\n"); goto leave_err; } @@ -813,8 +818,10 @@ int main(int argc, char *argv[]) } plist_free(dict); - fuse_opt_add_arg(&args, "-omodules=subdir"); - fuse_opt_add_arg(&args, "-osubdir=Documents"); + if (opts.use_container == 0) { + fuse_opt_add_arg(&args, "-omodules=subdir"); + fuse_opt_add_arg(&args, "-osubdir=Documents"); + } } #endif res = fuse_main(args.argc, args.argv, &ifuse_oper, NULL); |