aboutsummaryrefslogtreecommitdiffstats
path: root/src/firejail/main.c
diff options
context:
space:
mode:
authorLibravatar smitsohu <smitsohu@gmail.com>2020-08-19 00:55:47 +0200
committerLibravatar smitsohu <smitsohu@gmail.com>2020-08-19 00:55:47 +0200
commitf473c959d2549ec0799bc6a7b7609c10b7f7e758 (patch)
tree9db27c3f12ad9a0d4be9524a8557cfd52e01a29a /src/firejail/main.c
parentdrop system(3) calls from sandbox.c (diff)
downloadfirejail-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.c31
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) {