From 7d79d7143d0ac160e14939f2a614abc95589fa6b Mon Sep 17 00:00:00 2001 From: netblue30 Date: Sun, 17 Jan 2016 18:50:44 -0500 Subject: if the program name is a symbolic link, use the real path to generate the name of the profile file --- src/firejail/firejail.h | 2 +- src/firejail/main.c | 6 ++---- src/firejail/util.c | 26 +++++++++++++++++++++++--- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/firejail/firejail.h b/src/firejail/firejail.h index ba8a9dc48..180454bda 100644 --- a/src/firejail/firejail.h +++ b/src/firejail/firejail.h @@ -335,7 +335,7 @@ int net_move_interface(const char *dev, unsigned pid); // util.c void drop_privs(int nogroups); int mkpath_as_root(const char* path); -void extract_command_name(const char *str); +void extract_command_name(int index, char **argv); void logsignal(int s); void logmsg(const char *msg); void logargs(int argc, char **argv) ; diff --git a/src/firejail/main.c b/src/firejail/main.c index 43d2f0fa2..2ae3213ee 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c @@ -1265,9 +1265,8 @@ int main(int argc, char **argv) { fprintf(stderr, "Error: program name not found\n"); exit(1); } - extract_command_name(argv[i]); + extract_command_name(i, argv); prog_index = i; - cfg.original_program_index = i; break; } else { @@ -1278,9 +1277,8 @@ int main(int argc, char **argv) { } // we have a program name coming - extract_command_name(argv[i]); + extract_command_name(i, argv); prog_index = i; - cfg.original_program_index = i; break; } } diff --git a/src/firejail/util.c b/src/firejail/util.c index a8763b194..d7964ccb8 100644 --- a/src/firejail/util.c +++ b/src/firejail/util.c @@ -398,9 +398,29 @@ int find_child(pid_t parent, pid_t *child) { -void extract_command_name(const char *str) { - assert(str); - cfg.command_name = strdup(str); +void extract_command_name(int index, char **argv) { + assert(argv); + assert(argv[index]); + + + // configure command index + cfg.original_program_index = index; + + char *str = strdup(argv[index]); + if (!str) + errExit("strdup"); + + // if we have a symbolic link, use the real path to extract the name + if (is_link(argv[index])) { + char*newname = realpath(argv[index], NULL); + if (newname) { + free(str); + str = newname; + } + } + + // configure command name + cfg.command_name = str; if (!cfg.command_name) errExit("strdup"); -- cgit v1.2.3-54-g00ecf