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); |
} |
} |