diff options
author | netblue30 <netblue30@yahoo.com> | 2017-09-19 17:07:02 -0400 |
---|---|---|
committer | netblue30 <netblue30@yahoo.com> | 2017-09-19 17:07:02 -0400 |
commit | 4560185cfe17aff45659bdae51794732e456a433 (patch) | |
tree | d3d6a1ac6ba83132cde25c7295c30c82e537c30a /src/firecfg/main.c | |
parent | Merge branch 'master' of http://github.com/netblue30/firejail (diff) | |
download | firejail-4560185cfe17aff45659bdae51794732e456a433.tar.gz firejail-4560185cfe17aff45659bdae51794732e456a433.tar.zst firejail-4560185cfe17aff45659bdae51794732e456a433.zip |
fix issue #1559
Diffstat (limited to 'src/firecfg/main.c')
-rw-r--r-- | src/firecfg/main.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/src/firecfg/main.c b/src/firecfg/main.c index 1ecfbf524..82b30c2c5 100644 --- a/src/firecfg/main.c +++ b/src/firecfg/main.c | |||
@@ -330,23 +330,39 @@ static void set_links(void) { | |||
330 | free(firejail_exec); | 330 | free(firejail_exec); |
331 | } | 331 | } |
332 | 332 | ||
333 | int have_profile(const char *filename) { | 333 | // look for a profile file in /etc/firejail diectory and in homedir/.config/firejail directory |
334 | static int have_profile(const char *filename, const char *homedir) { | ||
335 | assert(filename); | ||
336 | assert(homedir); | ||
337 | printf("test #%s# #%s#\n", filename, homedir); | ||
338 | |||
334 | // remove .desktop extension | 339 | // remove .desktop extension |
335 | char *f1 = strdup(filename); | 340 | char *f1 = strdup(filename); |
336 | if (!f1) | 341 | if (!f1) |
337 | errExit("strdup"); | 342 | errExit("strdup"); |
338 | f1[strlen(filename) - 8] = '\0'; | 343 | f1[strlen(filename) - 8] = '\0'; |
344 | printf("#%s#\n", f1); | ||
339 | 345 | ||
340 | // build profile name | 346 | // build profile name |
341 | char *profname; | 347 | char *profname1; |
342 | if (asprintf(&profname, "%s/%s.profile", SYSCONFDIR, f1) == -1) | 348 | char *profname2; |
349 | if (asprintf(&profname1, "%s/%s.profile", SYSCONFDIR, f1) == -1) | ||
343 | errExit("asprintf"); | 350 | errExit("asprintf"); |
344 | 351 | if (asprintf(&profname2, "%s/./configure/firejail/%s.profile", homedir, f1) == -1) | |
345 | struct stat s; | 352 | errExit("asprintf"); |
346 | int rv = stat(profname, &s); | 353 | printf("#%s#\n", profname1); |
354 | printf("#%s#\n", profname2); | ||
355 | |||
356 | int rv = 0; | ||
357 | if (access(profname1, R_OK) == 0) | ||
358 | rv = 1; | ||
359 | else if (access(profname2, R_OK) == 0) | ||
360 | rv == 1; | ||
361 | |||
347 | free(f1); | 362 | free(f1); |
348 | free(profname); | 363 | free(profname1); |
349 | return (rv == 0)? 1: 0; | 364 | free(profname2); |
365 | return rv; | ||
350 | } | 366 | } |
351 | 367 | ||
352 | static void fix_desktop_files(char *homedir) { | 368 | static void fix_desktop_files(char *homedir) { |
@@ -411,7 +427,7 @@ static void fix_desktop_files(char *homedir) { | |||
411 | errExit("stat"); | 427 | errExit("stat"); |
412 | 428 | ||
413 | // no profile in /etc/firejail, no desktop file fixing | 429 | // no profile in /etc/firejail, no desktop file fixing |
414 | if (!have_profile(filename)) | 430 | if (!have_profile(filename, homedir)) |
415 | continue; | 431 | continue; |
416 | 432 | ||
417 | /* coverity[toctou] */ | 433 | /* coverity[toctou] */ |