diff options
Diffstat (limited to 'src/firecfg/main.c')
-rw-r--r-- | src/firecfg/main.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/firecfg/main.c b/src/firecfg/main.c index 7465f2d3e..0c6b278b5 100644 --- a/src/firecfg/main.c +++ b/src/firecfg/main.c | |||
@@ -30,7 +30,7 @@ static void usage(void) { | |||
30 | printf("Firecfg is the desktop configuration utility for Firejail software. The utility\n"); | 30 | printf("Firecfg is the desktop configuration utility for Firejail software. The utility\n"); |
31 | printf("creates several symbolic links to firejail executable. This allows the user to\n"); | 31 | printf("creates several symbolic links to firejail executable. This allows the user to\n"); |
32 | printf("sandbox applications automatically, just by clicking on a regular desktop\n"); | 32 | printf("sandbox applications automatically, just by clicking on a regular desktop\n"); |
33 | printf("menues and icons.\n\n"); | 33 | printf("menus and icons.\n\n"); |
34 | printf("The symbolic links are placed in /usr/local/bin. For more information, see\n"); | 34 | printf("The symbolic links are placed in /usr/local/bin. For more information, see\n"); |
35 | printf("DESKTOP INTEGRATION section in man 1 firejail.\n\n"); | 35 | printf("DESKTOP INTEGRATION section in man 1 firejail.\n\n"); |
36 | printf("Usage: firecfg [OPTIONS]\n\n"); | 36 | printf("Usage: firecfg [OPTIONS]\n\n"); |
@@ -245,21 +245,33 @@ static void set(void) { | |||
245 | lineno++; | 245 | lineno++; |
246 | if (*buf == '#') // comments | 246 | if (*buf == '#') // comments |
247 | continue; | 247 | continue; |
248 | |||
249 | // do not accept .. and/or / in file name | ||
250 | if (strstr(buf, "..") || strchr(buf, '/')) { | ||
251 | fprintf(stderr, "Error: invalid line %d in %s\n", lineno, cfgfile); | ||
252 | exit(1); | ||
253 | } | ||
248 | 254 | ||
249 | // remove \n | 255 | // remove \n |
250 | char *ptr = strchr(buf, '\n'); | 256 | char *ptr = strchr(buf, '\n'); |
251 | if (ptr) | 257 | if (ptr) |
252 | *ptr = '\0'; | 258 | *ptr = '\0'; |
259 | |||
260 | // trim spaces | ||
261 | ptr = buf; | ||
262 | while (*ptr == ' ' || *ptr == '\t') | ||
263 | ptr++; | ||
264 | char *start = ptr; | ||
253 | 265 | ||
254 | // do not accept .. and/or / in file name | 266 | // empty line |
255 | if (strstr(buf, "..") || strchr(buf, '/')) { | 267 | if (*start == '\0') |
256 | fprintf(stderr, "Error: invalid line %d in %s\n", lineno, cfgfile); | 268 | continue; |
257 | exit(1); | ||
258 | } | ||
259 | 269 | ||
260 | set_file(buf, firejail_exec); | 270 | // set link |
271 | set_file(start, firejail_exec); | ||
261 | } | 272 | } |
262 | 273 | ||
274 | fclose(fp); | ||
263 | free(cfgfile); | 275 | free(cfgfile); |
264 | free(firejail_exec); | 276 | free(firejail_exec); |
265 | } | 277 | } |