version 1.1.1.3, 2012/10/09 09:29:52
|
version 1.1.1.6, 2014/06/15 16:12:55
|
Line 1
|
Line 1
|
/* |
/* |
* Copyright (c) 2008, 2010 Todd C. Miller <Todd.Miller@courtesan.com> | * Copyright (c) 2008, 2010-2013 Todd C. Miller <Todd.Miller@courtesan.com> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 25
|
Line 25
|
#include <string.h> |
#include <string.h> |
#include <signal.h> |
#include <signal.h> |
#include <unistd.h> |
#include <unistd.h> |
#ifdef HAVE_SETLOCALE |
|
# include <locale.h> |
|
#endif |
|
#ifdef HAVE_STDBOOL_H |
#ifdef HAVE_STDBOOL_H |
# include <stdbool.h> |
# include <stdbool.h> |
#else |
#else |
# 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 "error.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" |
#include "sudo_plugin.h" |
#include "sudo_plugin.h" |
|
|
sudo_conv_t sudo_conv; /* NULL in non-plugin */ | __dso_public int main(int argc, char *argv[], char *envp[]); |
|
|
/* |
|
* Cleanup hook for error()/errorx() |
|
*/ |
|
void |
|
cleanup(int gotsignal) |
|
{ |
|
return; |
|
} |
|
|
|
int |
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) |
|
|
#ifdef HAVE_SETLOCALE |
|
setlocale(LC_ALL, ""); |
setlocale(LC_ALL, ""); |
#endif |
|
bindtextdomain(PACKAGE_NAME, LOCALEDIR); |
bindtextdomain(PACKAGE_NAME, LOCALEDIR); |
textdomain(PACKAGE_NAME); |
textdomain(PACKAGE_NAME); |
|
|
if (argc < 2) |
if (argc < 2) |
errorx(EXIT_FAILURE, _("requires at least one argument")); | fatalx(U_("requires at least one argument")); |
|
|
/* Read sudo.conf. */ |
/* Read sudo.conf. */ |
sudo_conf_read(); | 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 83 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); |
} |
} |