diff options
author | smitsohu <smitsohu@gmail.com> | 2020-08-19 00:55:47 +0200 |
---|---|---|
committer | smitsohu <smitsohu@gmail.com> | 2020-08-19 00:55:47 +0200 |
commit | f473c959d2549ec0799bc6a7b7609c10b7f7e758 (patch) | |
tree | 9db27c3f12ad9a0d4be9524a8557cfd52e01a29a /src/firejail/main.c | |
parent | drop system(3) calls from sandbox.c (diff) | |
download | firejail-f473c959d2549ec0799bc6a7b7609c10b7f7e758.tar.gz firejail-f473c959d2549ec0799bc6a7b7609c10b7f7e758.tar.zst firejail-f473c959d2549ec0799bc6a7b7609c10b7f7e758.zip |
cat option
Diffstat (limited to 'src/firejail/main.c')
-rw-r--r-- | src/firejail/main.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/firejail/main.c b/src/firejail/main.c index 79e39b669..afd9af91d 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c | |||
@@ -811,6 +811,8 @@ static void run_cmd_and_exit(int i, int argc, char **argv) { | |||
811 | } | 811 | } |
812 | 812 | ||
813 | // list directory contents | 813 | // list directory contents |
814 | if (!arg_debug) | ||
815 | arg_quiet = 1; | ||
814 | pid_t pid = require_pid(argv[i] + 5); | 816 | pid_t pid = require_pid(argv[i] + 5); |
815 | sandboxfs(SANDBOX_FS_LS, pid, path, NULL); | 817 | sandboxfs(SANDBOX_FS_LS, pid, path, NULL); |
816 | exit(0); | 818 | exit(0); |
@@ -818,6 +820,35 @@ static void run_cmd_and_exit(int i, int argc, char **argv) { | |||
818 | else | 820 | else |
819 | exit_err_feature("file transfer"); | 821 | exit_err_feature("file transfer"); |
820 | } | 822 | } |
823 | else if (strncmp(argv[i], "--cat=", 6) == 0) { | ||
824 | if (checkcfg(CFG_FILE_TRANSFER)) { | ||
825 | logargs(argc, argv); | ||
826 | if (arg_private_cwd) { | ||
827 | fprintf(stderr, "Error: --cat and --private-cwd options are mutually exclusive\n"); | ||
828 | exit(1); | ||
829 | } | ||
830 | |||
831 | if ((i + 2) != argc) { | ||
832 | fprintf(stderr, "Error: invalid --cat option, path expected\n"); | ||
833 | exit(1); | ||
834 | } | ||
835 | char *path = argv[i + 1]; | ||
836 | invalid_filename(path, 0); // no globbing | ||
837 | if (strstr(path, "..")) { | ||
838 | fprintf(stderr, "Error: invalid file name %s\n", path); | ||
839 | exit(1); | ||
840 | } | ||
841 | |||
842 | // write file contents to stdout | ||
843 | if (!arg_debug) | ||
844 | arg_quiet = 1; | ||
845 | pid_t pid = require_pid(argv[i] + 6); | ||
846 | sandboxfs(SANDBOX_FS_CAT, pid, path, NULL); | ||
847 | exit(0); | ||
848 | } | ||
849 | else | ||
850 | exit_err_feature("file transfer"); | ||
851 | } | ||
821 | #endif | 852 | #endif |
822 | else if (strncmp(argv[i], "--join=", 7) == 0) { | 853 | else if (strncmp(argv[i], "--join=", 7) == 0) { |
823 | if (checkcfg(CFG_JOIN) || getuid() == 0) { | 854 | if (checkcfg(CFG_JOIN) || getuid() == 0) { |