aboutsummaryrefslogtreecommitdiffstats
path: root/src/firejail/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/firejail/util.c')
-rw-r--r--src/firejail/util.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/src/firejail/util.c b/src/firejail/util.c
index 6a7318c4b..b41a65c1d 100644
--- a/src/firejail/util.c
+++ b/src/firejail/util.c
@@ -447,15 +447,13 @@ int is_link(const char *fname) {
447 if (*fname == '\0') 447 if (*fname == '\0')
448 return 0; 448 return 0;
449 449
450 char *dup = strdup(fname); 450 // remove trailing slashes
451 if (!dup) 451 char *tmp = clean_pathname(fname);
452 errExit("strdup");
453 trim_trailing_slash_or_dot(dup);
454 452
455 char c; 453 char c;
456 ssize_t rv = readlink(dup, &c, 1); 454 ssize_t rv = readlink(tmp, &c, 1);
455 free(tmp);
457 456
458 free(dup);
459 return (rv != -1); 457 return (rv != -1);
460} 458}
461 459
@@ -1319,14 +1317,14 @@ static int has_link(const char *dir) {
1319 return 0; 1317 return 0;
1320} 1318}
1321 1319
1322void check_homedir(void) { 1320void check_homedir(const char *dir) {
1323 assert(cfg.homedir); 1321 assert(dir);
1324 if (cfg.homedir[0] != '/') { 1322 if (dir[0] != '/') {
1325 fprintf(stderr, "Error: invalid user directory \"%s\"\n", cfg.homedir); 1323 fprintf(stderr, "Error: invalid user directory \"%s\"\n", cfg.homedir);
1326 exit(1); 1324 exit(1);
1327 } 1325 }
1328 // symlinks are rejected in many places 1326 // symlinks are rejected in many places
1329 if (has_link(cfg.homedir)) { 1327 if (has_link(dir)) {
1330 fprintf(stderr, "No full support for symbolic links in path of user directory.\n" 1328 fprintf(stderr, "No full support for symbolic links in path of user directory.\n"
1331 "Please provide resolved path in password database (/etc/passwd).\n\n"); 1329 "Please provide resolved path in password database (/etc/passwd).\n\n");
1332 } 1330 }