diff options
Diffstat (limited to 'src/firejail/util.c')
-rw-r--r-- | src/firejail/util.c | 18 |
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 | ||
1322 | void check_homedir(void) { | 1320 | void 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 | } |