aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2016-11-17 13:12:15 -0500
committerLibravatar netblue30 <netblue30@yahoo.com>2016-11-17 13:12:15 -0500
commit94ad4edd5e41a26161fdf0c44f8a0dea77e3d120 (patch)
tree6afa38e468d35b52f636c2af3153bf84212c03c6 /src
parentfcopy part 3 (diff)
downloadfirejail-94ad4edd5e41a26161fdf0c44f8a0dea77e3d120.tar.gz
firejail-94ad4edd5e41a26161fdf0c44f8a0dea77e3d120.tar.zst
firejail-94ad4edd5e41a26161fdf0c44f8a0dea77e3d120.zip
testing appimage
Diffstat (limited to 'src')
-rw-r--r--src/firejail/appimage.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/firejail/appimage.c b/src/firejail/appimage.c
index 01a78c324..6a9ca1679 100644
--- a/src/firejail/appimage.c
+++ b/src/firejail/appimage.c
@@ -31,34 +31,39 @@
31static char *devloop = NULL; // device file 31static char *devloop = NULL; // device file
32static char *mntdir = NULL; // mount point in /tmp directory 32static char *mntdir = NULL; // mount point in /tmp directory
33 33
34void appimage_set(const char *appimage_path) { 34void appimage_set(const char *appimage) {
35 assert(appimage_path); 35 assert(appimage);
36 assert(devloop == NULL); // don't call this twice! 36 assert(devloop == NULL); // don't call this twice!
37 EUID_ASSERT(); 37 EUID_ASSERT();
38 38
39#ifdef LOOP_CTL_GET_FREE // test for older kernels; this definition is found in /usr/include/linux/loop.h 39#ifdef LOOP_CTL_GET_FREE // test for older kernels; this definition is found in /usr/include/linux/loop.h
40 // check appimage_path 40 // check appimage file
41 if (access(appimage_path, R_OK) == -1) { 41 invalid_filename(appimage);
42 if (access(appimage, R_OK) == -1) {
42 fprintf(stderr, "Error: cannot access AppImage file\n"); 43 fprintf(stderr, "Error: cannot access AppImage file\n");
43 exit(1); 44 exit(1);
44 } 45 }
45 46
46 // get appimage type and ELF size 47 // get appimage type and ELF size
47 // a value of 0 means we are dealing with a type1 appimage 48 // a value of 0 means we are dealing with a type1 appimage
48 long unsigned int size = appimage2_size(appimage_path); 49 long unsigned int size = appimage2_size(appimage);
49 if (arg_debug) 50 if (arg_debug)
50 printf("AppImage ELF size %lu\n", size); 51 printf("AppImage ELF size %lu\n", size);
51 52
52 // open as user to prevent race condition 53 // open appimage file
53 int ffd = open(appimage_path, O_RDONLY|O_CLOEXEC); 54 int ffd = open(appimage, O_RDONLY|O_CLOEXEC);
54 if (ffd == -1) { 55 if (ffd == -1) {
55 fprintf(stderr, "Error: /dev/loop-control interface is not supported by your kernel\n"); 56 fprintf(stderr, "Error: cannot open AppImage file\n");
56 exit(1); 57 exit(1);
57 } 58 }
58 59
59 // find or allocate a free loop device to use 60 // find or allocate a free loop device to use
60 EUID_ROOT(); 61 EUID_ROOT();
61 int cfd = open("/dev/loop-control", O_RDWR); 62 int cfd = open("/dev/loop-control", O_RDWR);
63 if (cfd == -1) {
64 fprintf(stderr, "Error: /dev/loop-control interface is not supported by your kernel\n");
65 exit(1);
66 }
62 int devnr = ioctl(cfd, LOOP_CTL_GET_FREE); 67 int devnr = ioctl(cfd, LOOP_CTL_GET_FREE);
63 if (devnr == -1) { 68 if (devnr == -1) {
64 fprintf(stderr, "Error: cannot allocate a new loopback device\n"); 69 fprintf(stderr, "Error: cannot allocate a new loopback device\n");
@@ -113,7 +118,7 @@ void appimage_set(const char *appimage_path) {
113 EUID_USER(); 118 EUID_USER();
114 119
115 // set environment 120 // set environment
116 if (appimage_path && setenv("APPIMAGE", appimage_path, 1) < 0) 121 if (appimage && setenv("APPIMAGE", appimage, 1) < 0)
117 errExit("setenv"); 122 errExit("setenv");
118 if (mntdir && setenv("APPDIR", mntdir, 1) < 0) 123 if (mntdir && setenv("APPDIR", mntdir, 1) < 0)
119 errExit("setenv"); 124 errExit("setenv");