diff options
Diffstat (limited to 'src/firejail/main.c')
-rw-r--r-- | src/firejail/main.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/firejail/main.c b/src/firejail/main.c index eebb04fcc..2c6b5a5e1 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c | |||
@@ -426,6 +426,29 @@ static void run_cmd_and_exit(int i, int argc, char **argv) { | |||
426 | exit(0); | 426 | exit(0); |
427 | } | 427 | } |
428 | #endif | 428 | #endif |
429 | else if (strncmp(argv[i], "--get=", 6) == 0) { | ||
430 | logargs(argc, argv); | ||
431 | |||
432 | // verify path | ||
433 | if ((i + 2) != argc) { | ||
434 | fprintf(stderr, "Error: invalid --get option, path expected\n"); | ||
435 | exit(1); | ||
436 | } | ||
437 | char *path = argv[i + 1]; | ||
438 | invalid_filename(path); | ||
439 | if (strstr(path, "..")) { | ||
440 | fprintf(stderr, "Error: invalid file name %s\n", path); | ||
441 | exit(1); | ||
442 | } | ||
443 | |||
444 | // get file | ||
445 | pid_t pid; | ||
446 | if (read_pid(argv[i] + 6, &pid) == 0) | ||
447 | sandboxfs(SANDBOX_FS_GET, pid, path); | ||
448 | else | ||
449 | sandboxfs_name(SANDBOX_FS_GET, argv[i] + 6, path); | ||
450 | exit(0); | ||
451 | } | ||
429 | else if (strncmp(argv[i], "--ls=", 5) == 0) { | 452 | else if (strncmp(argv[i], "--ls=", 5) == 0) { |
430 | logargs(argc, argv); | 453 | logargs(argc, argv); |
431 | 454 | ||
@@ -444,9 +467,9 @@ static void run_cmd_and_exit(int i, int argc, char **argv) { | |||
444 | // list directory contents | 467 | // list directory contents |
445 | pid_t pid; | 468 | pid_t pid; |
446 | if (read_pid(argv[i] + 5, &pid) == 0) | 469 | if (read_pid(argv[i] + 5, &pid) == 0) |
447 | ls(pid, path); | 470 | sandboxfs(SANDBOX_FS_LS, pid, path); |
448 | else | 471 | else |
449 | ls_name(argv[i] + 5, path); | 472 | sandboxfs_name(SANDBOX_FS_LS, argv[i] + 5, path); |
450 | exit(0); | 473 | exit(0); |
451 | } | 474 | } |
452 | else if (strncmp(argv[i], "--join=", 7) == 0) { | 475 | else if (strncmp(argv[i], "--join=", 7) == 0) { |