diff options
Diffstat (limited to 'src/firejail/main.c')
-rw-r--r-- | src/firejail/main.c | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/src/firejail/main.c b/src/firejail/main.c index 126f98d9b..fef333601 100644 --- a/src/firejail/main.c +++ b/src/firejail/main.c | |||
@@ -831,13 +831,21 @@ char *guess_shell(void) { | |||
831 | return shell; | 831 | return shell; |
832 | } | 832 | } |
833 | 833 | ||
834 | static int check_arg(int argc, char **argv, const char *argument) { | 834 | static int check_arg(int argc, char **argv, const char *argument, int strict) { |
835 | int i; | 835 | int i; |
836 | int found = 0; | 836 | int found = 0; |
837 | for (i = 1; i < argc; i++) { | 837 | for (i = 1; i < argc; i++) { |
838 | if (strcmp(argv[i], argument) == 0) { | 838 | if (strict) { |
839 | found = 1; | 839 | if (strcmp(argv[i], argument) == 0) { |
840 | break; | 840 | found = 1; |
841 | break; | ||
842 | } | ||
843 | } | ||
844 | else { | ||
845 | if (strncmp(argv[i], argument, strlen(argument)) == 0) { | ||
846 | found = 1; | ||
847 | break; | ||
848 | } | ||
841 | } | 849 | } |
842 | 850 | ||
843 | // detect end of firejail params | 851 | // detect end of firejail params |
@@ -891,9 +899,9 @@ int main(int argc, char **argv) { | |||
891 | preproc_build_firejail_dir(); | 899 | preproc_build_firejail_dir(); |
892 | preproc_clean_run(); | 900 | preproc_clean_run(); |
893 | 901 | ||
894 | if (check_arg(argc, argv, "--quiet")) | 902 | if (check_arg(argc, argv, "--quiet", 1)) |
895 | arg_quiet = 1; | 903 | arg_quiet = 1; |
896 | if (check_arg(argc, argv, "--allow-debuggers")) { | 904 | if (check_arg(argc, argv, "--allow-debuggers", 1)) { |
897 | // check kernel version | 905 | // check kernel version |
898 | struct utsname u; | 906 | struct utsname u; |
899 | int rv = uname(&u); | 907 | int rv = uname(&u); |
@@ -921,14 +929,14 @@ int main(int argc, char **argv) { | |||
921 | 929 | ||
922 | #ifdef HAVE_GIT_INSTALL | 930 | #ifdef HAVE_GIT_INSTALL |
923 | // process git-install and git-uninstall | 931 | // process git-install and git-uninstall |
924 | if (check_arg(argc, argv, "--git-install")) | 932 | if (check_arg(argc, argv, "--git-install", 1)) |
925 | git_install(); // this function will not return | 933 | git_install(); // this function will not return |
926 | if (check_arg(argc, argv, "--git-uninstall")) | 934 | if (check_arg(argc, argv, "--git-uninstall", 1)) |
927 | git_uninstall(); // this function will not return | 935 | git_uninstall(); // this function will not return |
928 | #endif | 936 | #endif |
929 | 937 | ||
930 | // profile builder | 938 | // profile builder |
931 | if (check_arg(argc, argv, "--build")) | 939 | if (check_arg(argc, argv, "--build", 0)) // supports both --build and --build=filename |
932 | run_builder(argc, argv); // this function will not return | 940 | run_builder(argc, argv); // this function will not return |
933 | 941 | ||
934 | // check argv[0] symlink wrapper if this is not a login shell | 942 | // check argv[0] symlink wrapper if this is not a login shell |
@@ -946,10 +954,10 @@ int main(int argc, char **argv) { | |||
946 | EUID_USER(); | 954 | EUID_USER(); |
947 | if (rv == 0) { | 955 | if (rv == 0) { |
948 | // if --force option is passed to the program, disregard the existing sandbox | 956 | // if --force option is passed to the program, disregard the existing sandbox |
949 | if (check_arg(argc, argv, "--force")) | 957 | if (check_arg(argc, argv, "--force", 1)) |
950 | option_force = 1; | 958 | option_force = 1; |
951 | else { | 959 | else { |
952 | if (check_arg(argc, argv, "--version")) { | 960 | if (check_arg(argc, argv, "--version", 1)) { |
953 | printf("firejail version %s\n", VERSION); | 961 | printf("firejail version %s\n", VERSION); |
954 | exit(0); | 962 | exit(0); |
955 | } | 963 | } |
@@ -966,7 +974,7 @@ int main(int argc, char **argv) { | |||
966 | EUID_ROOT(); | 974 | EUID_ROOT(); |
967 | if (geteuid()) { | 975 | if (geteuid()) { |
968 | // only --version is supported without SUID support | 976 | // only --version is supported without SUID support |
969 | if (check_arg(argc, argv, "--version")) { | 977 | if (check_arg(argc, argv, "--version", 1)) { |
970 | printf("firejail version %s\n", VERSION); | 978 | printf("firejail version %s\n", VERSION); |
971 | exit(0); | 979 | exit(0); |
972 | } | 980 | } |