aboutsummaryrefslogtreecommitdiffstats
path: root/src/firecfg/main.c
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2017-09-19 17:07:02 -0400
committerLibravatar netblue30 <netblue30@yahoo.com>2017-09-19 17:07:02 -0400
commit4560185cfe17aff45659bdae51794732e456a433 (patch)
treed3d6a1ac6ba83132cde25c7295c30c82e537c30a /src/firecfg/main.c
parentMerge branch 'master' of http://github.com/netblue30/firejail (diff)
downloadfirejail-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.c34
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
333int have_profile(const char *filename) { 333// look for a profile file in /etc/firejail diectory and in homedir/.config/firejail directory
334static int have_profile(const char *filename, const char *homedir) {
335 assert(filename);
336 assert(homedir);
337printf("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';
344printf("#%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); 353printf("#%s#\n", profname1);
354printf("#%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
352static void fix_desktop_files(char *homedir) { 368static 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] */