aboutsummaryrefslogtreecommitdiffstats
path: root/src/firejail/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/firejail/main.c')
-rw-r--r--src/firejail/main.c32
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
834static int check_arg(int argc, char **argv, const char *argument) { 834static 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 }