|
|
| version 1.1.1.5, 2013/10/14 07:56:35 | version 1.1.1.6, 2014/06/15 16:12:55 |
|---|---|
| Line 31 | Line 31 |
| # include "compat/stdbool.h" | # include "compat/stdbool.h" |
| #endif /* HAVE_STDBOOL_H */ | #endif /* HAVE_STDBOOL_H */ |
| #include "gettext.h" /* must be included before missing.h */ | |
| #include "missing.h" | #include "missing.h" |
| #include "alloc.h" | #include "alloc.h" |
| #include "fatal.h" | #include "fatal.h" |
| #include "gettext.h" | |
| #include "sudo_conf.h" | #include "sudo_conf.h" |
| #include "sudo_debug.h" | #include "sudo_debug.h" |
| #include "sudo_exec.h" | #include "sudo_exec.h" |
| Line 46 int | Line 47 int |
| main(int argc, char *argv[], char *envp[]) | main(int argc, char *argv[], char *envp[]) |
| { | { |
| char *cp, *cmnd; | char *cp, *cmnd; |
| int noexec = 0; | bool login_shell, noexec = false; |
| debug_decl(main, SUDO_DEBUG_MAIN) | debug_decl(main, SUDO_DEBUG_MAIN) |
| setlocale(LC_ALL, ""); | setlocale(LC_ALL, ""); |
| Line 54 main(int argc, char *argv[], char *envp[]) | Line 55 main(int argc, char *argv[], char *envp[]) |
| textdomain(PACKAGE_NAME); | textdomain(PACKAGE_NAME); |
| if (argc < 2) | if (argc < 2) |
| fatalx(_("requires at least one argument")); | fatalx(U_("requires at least one argument")); |
| /* Read sudo.conf. */ | /* Read sudo.conf. */ |
| sudo_conf_read(NULL); | sudo_conf_read(NULL); |
| /* If the first char of argv[0] is '-', we are running as a login shell. */ | |
| login_shell = argv[0][0] == '-'; | |
| /* If argv[0] ends in -noexec, pass the flag to sudo_execve() */ | /* If argv[0] ends in -noexec, pass the flag to sudo_execve() */ |
| if ((cp = strrchr(argv[0], '-')) != NULL && cp != argv[0]) | if ((cp = strrchr(argv[0], '-')) != NULL && cp != argv[0]) |
| noexec = strcmp(cp, "-noexec") == 0; | noexec = strcmp(cp, "-noexec") == 0; |
| Line 69 main(int argc, char *argv[], char *envp[]) | Line 73 main(int argc, char *argv[], char *envp[]) |
| cmnd = estrdup(argv[0]); | cmnd = estrdup(argv[0]); |
| /* If invoked as a login shell, modify argv[0] accordingly. */ | /* If invoked as a login shell, modify argv[0] accordingly. */ |
| if (argv[-1][0] == '-') { | if (login_shell) { |
| if ((cp = strrchr(argv[0], '/')) == NULL) | if ((cp = strrchr(argv[0], '/')) == NULL) |
| cp = argv[0]; | cp = argv[0]; |
| *cp = '-'; | *cp = '-'; |
| } | } |
| sudo_execve(cmnd, argv, envp, noexec); | sudo_execve(cmnd, argv, envp, noexec); |
| warning(_("unable to execute %s"), argv[0]); | warning(U_("unable to execute %s"), argv[0]); |
| sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, EXIT_FAILURE); | sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, EXIT_FAILURE); |
| _exit(EXIT_FAILURE); | _exit(EXIT_FAILURE); |
| } | } |