|
version 1.1, 2012/02/21 16:23:02
|
version 1.1.1.3, 2012/10/09 09:29:52
|
|
Line 19
|
Line 19
|
| #include <config.h> |
#include <config.h> |
| |
|
| #include <sys/types.h> |
#include <sys/types.h> |
| #include <err.h> |
|
| #include <errno.h> |
|
| #include <limits.h> |
#include <limits.h> |
| #include <stdio.h> |
#include <stdio.h> |
| #include <stdlib.h> |
#include <stdlib.h> |
| #include <string.h> |
#include <string.h> |
| |
#include <signal.h> |
| #include <unistd.h> |
#include <unistd.h> |
| #ifdef HAVE_SETLOCALE |
#ifdef HAVE_SETLOCALE |
| # include <locale.h> |
# include <locale.h> |
| #endif |
#endif |
| |
#ifdef HAVE_STDBOOL_H |
| |
# include <stdbool.h> |
| |
#else |
| |
# include "compat/stdbool.h" |
| |
#endif /* HAVE_STDBOOL_H */ |
| |
|
| #include "missing.h" |
#include "missing.h" |
| |
#include "alloc.h" |
| |
#include "error.h" |
| #include "gettext.h" |
#include "gettext.h" |
| |
#include "sudo_conf.h" |
| |
#include "sudo_debug.h" |
| |
#include "sudo_exec.h" |
| |
#include "sudo_plugin.h" |
| |
|
| |
sudo_conv_t sudo_conv; /* NULL in non-plugin */ |
| |
|
| |
/* |
| |
* Cleanup hook for error()/errorx() |
| |
*/ |
| |
void |
| |
cleanup(int gotsignal) |
| |
{ |
| |
return; |
| |
} |
| |
|
| int |
int |
| main (int argc, char *argv[]) | main(int argc, char *argv[], char *envp[]) |
| { |
{ |
| char *cp, *cmnd; |
char *cp, *cmnd; |
| |
int noexec = 0; |
| |
debug_decl(main, SUDO_DEBUG_MAIN) |
| |
|
| #ifdef HAVE_SETLOCALE |
#ifdef HAVE_SETLOCALE |
| setlocale(LC_ALL, ""); |
setlocale(LC_ALL, ""); |
|
Line 45 main (int argc, char *argv[])
|
Line 68 main (int argc, char *argv[])
|
| textdomain(PACKAGE_NAME); |
textdomain(PACKAGE_NAME); |
| |
|
| if (argc < 2) |
if (argc < 2) |
| errx(EXIT_FAILURE, _("requires at least one argument")); | errorx(EXIT_FAILURE, _("requires at least one argument")); |
| |
|
| |
/* Read sudo.conf. */ |
| |
sudo_conf_read(); |
| |
|
| |
/* If argv[0] ends in -noexec, pass the flag to sudo_execve() */ |
| |
if ((cp = strrchr(argv[0], '-')) != NULL && cp != argv[0]) |
| |
noexec = strcmp(cp, "-noexec") == 0; |
| |
|
| /* Shift argv and make a copy of the command to execute. */ |
/* Shift argv and make a copy of the command to execute. */ |
| argv++; |
argv++; |
| argc--; |
argc--; |
| cmnd = strdup(argv[0]); | cmnd = estrdup(argv[0]); |
| if (cmnd == NULL) | |
| err(EXIT_FAILURE, NULL); | |
| |
|
| /* If invoked as a login shell, modify argv[0] accordingly. */ |
/* If invoked as a login shell, modify argv[0] accordingly. */ |
| if (argv[0][0] == '-') { | if (argv[-1][0] == '-') { |
| if ((cp = strrchr(argv[0], '/')) == NULL) |
if ((cp = strrchr(argv[0], '/')) == NULL) |
| cp = argv[0]; |
cp = argv[0]; |
| *cp = '-'; |
*cp = '-'; |
| } |
} |
| execv(cmnd, argv); | sudo_execve(cmnd, argv, envp, noexec); |
| warn(_("unable to execute %s"), argv[0]); | warning(_("unable to execute %s"), argv[0]); |
| | sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, EXIT_FAILURE); |
| _exit(EXIT_FAILURE); |
_exit(EXIT_FAILURE); |
| } |
} |