In the plugin registers with the debug framework at open time, the
sudo front-end will now set the default debug instance appropriately before calling into the plugin. This means the plugin no longer needs to do the sudo_debug_set_default_instance() dance.
This commit is contained in:
@@ -338,7 +338,6 @@ set_debugging(const char *conf_file)
|
|||||||
struct plugin_info *plugin_info;
|
struct plugin_info *plugin_info;
|
||||||
const char *progname;
|
const char *progname;
|
||||||
size_t prognamelen;
|
size_t prognamelen;
|
||||||
int instance;
|
|
||||||
debug_decl(main, SUDO_DEBUG_UTIL, SUDO_DEBUG_INSTANCE_DEFAULT)
|
debug_decl(main, SUDO_DEBUG_UTIL, SUDO_DEBUG_INSTANCE_DEFAULT)
|
||||||
|
|
||||||
progname = getprogname();
|
progname = getprogname();
|
||||||
@@ -352,10 +351,7 @@ set_debugging(const char *conf_file)
|
|||||||
* Register debug instance for the main program, making it
|
* Register debug instance for the main program, making it
|
||||||
* the default instance if one is not already set.
|
* the default instance if one is not already set.
|
||||||
*/
|
*/
|
||||||
instance = sudo_debug_register(progname, NULL, NULL,
|
sudo_debug_register(progname, NULL, NULL, &debug_spec->debug_files);
|
||||||
&debug_spec->debug_files);
|
|
||||||
if (sudo_debug_get_default_instance() == SUDO_DEBUG_INSTANCE_INITIALIZER)
|
|
||||||
sudo_debug_set_default_instance(instance);
|
|
||||||
sudo_debug_enter(__func__, __FILE__, __LINE__, sudo_debug_subsys);
|
sudo_debug_enter(__func__, __FILE__, __LINE__, sudo_debug_subsys);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@@ -310,6 +310,10 @@ sudo_debug_register(const char *program, const char *const subsystems[],
|
|||||||
SLIST_INSERT_HEAD(&instance->outputs, output, entries);
|
SLIST_INSERT_HEAD(&instance->outputs, output, entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set default instance if not already set. */
|
||||||
|
if (sudo_debug_default_instance == -1)
|
||||||
|
sudo_debug_default_instance = idx;
|
||||||
|
|
||||||
/* Stash the pid string so we only have to format it once. */
|
/* Stash the pid string so we only have to format it once. */
|
||||||
if (sudo_debug_pidlen == 0) {
|
if (sudo_debug_pidlen == 0) {
|
||||||
(void)snprintf(sudo_debug_pidstr, sizeof(sudo_debug_pidstr), "[%d] ",
|
(void)snprintf(sudo_debug_pidstr, sizeof(sudo_debug_pidstr), "[%d] ",
|
||||||
|
@@ -573,7 +573,7 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
|
|||||||
char * const *cur;
|
char * const *cur;
|
||||||
const char *plugin_path = NULL;
|
const char *plugin_path = NULL;
|
||||||
size_t len;
|
size_t len;
|
||||||
int i, prev_instance, rval = -1;
|
int i, rval = -1;
|
||||||
debug_decl(sudoers_io_open, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_io_open, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
sudo_conv = conversation;
|
sudo_conv = conversation;
|
||||||
@@ -583,8 +583,6 @@ sudoers_io_open(unsigned int version, sudo_conv_t conversation,
|
|||||||
if (argc == 0)
|
if (argc == 0)
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
memset(&details, 0, sizeof(details));
|
memset(&details, 0, sizeof(details));
|
||||||
|
|
||||||
bindtextdomain("sudoers", LOCALEDIR);
|
bindtextdomain("sudoers", LOCALEDIR);
|
||||||
@@ -674,19 +672,15 @@ done:
|
|||||||
sudo_gr_delref(details.runas_gr);
|
sudo_gr_delref(details.runas_gr);
|
||||||
sudo_endgrent();
|
sudo_endgrent();
|
||||||
|
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
|
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sudoers_io_close(int exit_status, int error)
|
sudoers_io_close(int exit_status, int error)
|
||||||
{
|
{
|
||||||
int i, prev_instance;
|
int i;
|
||||||
debug_decl(sudoers_io_close, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_io_close, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
for (i = 0; i < IOFD_MAX; i++) {
|
for (i = 0; i < IOFD_MAX; i++) {
|
||||||
if (io_log_files[i].fd.v == NULL)
|
if (io_log_files[i].fd.v == NULL)
|
||||||
continue;
|
continue;
|
||||||
@@ -697,7 +691,6 @@ sudoers_io_close(int exit_status, int error)
|
|||||||
#endif
|
#endif
|
||||||
fclose(io_log_files[i].fd.f);
|
fclose(io_log_files[i].fd.f);
|
||||||
}
|
}
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
|
|
||||||
sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys);
|
sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys);
|
||||||
if (sudoers_debug_instance != SUDO_DEBUG_INSTANCE_INITIALIZER) {
|
if (sudoers_debug_instance != SUDO_DEBUG_INSTANCE_INITIALIZER) {
|
||||||
@@ -711,16 +704,11 @@ sudoers_io_close(int exit_status, int error)
|
|||||||
static int
|
static int
|
||||||
sudoers_io_version(int verbose)
|
sudoers_io_version(int verbose)
|
||||||
{
|
{
|
||||||
int prev_instance;
|
|
||||||
debug_decl(sudoers_io_version, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_io_version, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
sudo_printf(SUDO_CONV_INFO_MSG, "Sudoers I/O plugin version %s\n",
|
sudo_printf(SUDO_CONV_INFO_MSG, "Sudoers I/O plugin version %s\n",
|
||||||
PACKAGE_VERSION);
|
PACKAGE_VERSION);
|
||||||
|
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
|
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -731,11 +719,9 @@ static int
|
|||||||
sudoers_io_log(const char *buf, unsigned int len, int idx)
|
sudoers_io_log(const char *buf, unsigned int len, int idx)
|
||||||
{
|
{
|
||||||
struct timeval now, delay;
|
struct timeval now, delay;
|
||||||
int prev_instance, rval = true;
|
int rval = true;
|
||||||
debug_decl(sudoers_io_version, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_io_version, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
gettimeofday(&now, NULL);
|
gettimeofday(&now, NULL);
|
||||||
|
|
||||||
#ifdef HAVE_ZLIB_H
|
#ifdef HAVE_ZLIB_H
|
||||||
@@ -764,8 +750,6 @@ sudoers_io_log(const char *buf, unsigned int len, int idx)
|
|||||||
last_time.tv_sec = now.tv_sec;
|
last_time.tv_sec = now.tv_sec;
|
||||||
last_time.tv_usec = now.tv_usec;
|
last_time.tv_usec = now.tv_usec;
|
||||||
|
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
|
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -374,7 +374,7 @@ sudoers_policy_deserialize_info(void *v, char **runas_user, char **runas_group)
|
|||||||
user_umask = umask(SUDO_UMASK);
|
user_umask = umask(SUDO_UMASK);
|
||||||
umask(user_umask);
|
umask(user_umask);
|
||||||
|
|
||||||
/* Setup debugging if indicated. */
|
/* Setup debugging if indicated. (XXX - do earlier) */
|
||||||
sudoers_debug_register(&debug_files, plugin_path);
|
sudoers_debug_register(&debug_files, plugin_path);
|
||||||
|
|
||||||
/* Dump settings and user info (XXX - plugin args) */
|
/* Dump settings and user info (XXX - plugin args) */
|
||||||
@@ -538,7 +538,6 @@ sudoers_policy_open(unsigned int version, sudo_conv_t conversation,
|
|||||||
char * const user_info[], char * const envp[], char * const args[])
|
char * const user_info[], char * const envp[], char * const args[])
|
||||||
{
|
{
|
||||||
struct sudoers_policy_open_info info;
|
struct sudoers_policy_open_info info;
|
||||||
int prev_instance, rval;
|
|
||||||
debug_decl(sudoers_policy_open, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_open, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
sudo_version = version;
|
sudo_version = version;
|
||||||
@@ -549,26 +548,18 @@ sudoers_policy_open(unsigned int version, sudo_conv_t conversation,
|
|||||||
if (sudo_version < SUDO_API_MKVERSION(1, 2))
|
if (sudo_version < SUDO_API_MKVERSION(1, 2))
|
||||||
args = NULL;
|
args = NULL;
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
/* Call the sudoers init function. */
|
/* Call the sudoers init function. */
|
||||||
info.settings = settings;
|
info.settings = settings;
|
||||||
info.user_info = user_info;
|
info.user_info = user_info;
|
||||||
info.plugin_args = args;
|
info.plugin_args = args;
|
||||||
rval = sudoers_policy_init(&info, envp);
|
debug_return_bool(sudoers_policy_init(&info, envp));
|
||||||
|
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
debug_return_bool(rval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sudoers_policy_close(int exit_status, int error_code)
|
sudoers_policy_close(int exit_status, int error_code)
|
||||||
{
|
{
|
||||||
int prev_instance;
|
|
||||||
debug_decl(sudoers_policy_close, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_close, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
/* We do not currently log the exit status. */
|
/* We do not currently log the exit status. */
|
||||||
if (error_code) {
|
if (error_code) {
|
||||||
errno = error_code;
|
errno = error_code;
|
||||||
@@ -598,7 +589,6 @@ sudoers_policy_close(int exit_status, int error_code)
|
|||||||
}
|
}
|
||||||
sudo_efree(user_gids);
|
sudo_efree(user_gids);
|
||||||
user_gids = NULL;
|
user_gids = NULL;
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
|
|
||||||
sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys);
|
sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys);
|
||||||
if (sudoers_debug_instance != SUDO_DEBUG_INSTANCE_INITIALIZER) {
|
if (sudoers_debug_instance != SUDO_DEBUG_INSTANCE_INITIALIZER) {
|
||||||
@@ -617,18 +607,13 @@ sudoers_policy_close(int exit_status, int error_code)
|
|||||||
static int
|
static int
|
||||||
sudoers_policy_init_session(struct passwd *pwd, char **user_env[])
|
sudoers_policy_init_session(struct passwd *pwd, char **user_env[])
|
||||||
{
|
{
|
||||||
int prev_instance, rval;
|
|
||||||
debug_decl(sudoers_policy_init_session, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_init_session, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
/* user_env is only specified for API version 1.2 and higher. */
|
/* user_env is only specified for API version 1.2 and higher. */
|
||||||
if (sudo_version < SUDO_API_MKVERSION(1, 2))
|
if (sudo_version < SUDO_API_MKVERSION(1, 2))
|
||||||
user_env = NULL;
|
user_env = NULL;
|
||||||
|
|
||||||
rval = sudo_auth_begin_session(pwd, user_env);
|
debug_return_bool(sudo_auth_begin_session(pwd, user_env));
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
debug_return_bool(rval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -636,10 +621,9 @@ sudoers_policy_check(int argc, char * const argv[], char *env_add[],
|
|||||||
char **command_infop[], char **argv_out[], char **user_env_out[])
|
char **command_infop[], char **argv_out[], char **user_env_out[])
|
||||||
{
|
{
|
||||||
struct sudoers_exec_args exec_args;
|
struct sudoers_exec_args exec_args;
|
||||||
int prev_instance, rval;
|
int rval;
|
||||||
debug_decl(sudoers_policy_check, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_check, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
if (!ISSET(sudo_mode, MODE_EDIT))
|
if (!ISSET(sudo_mode, MODE_EDIT))
|
||||||
SET(sudo_mode, MODE_RUN);
|
SET(sudo_mode, MODE_RUN);
|
||||||
|
|
||||||
@@ -654,37 +638,28 @@ sudoers_policy_check(int argc, char * const argv[], char *env_add[],
|
|||||||
!sudo_auth_needs_end_session())
|
!sudo_auth_needs_end_session())
|
||||||
sudoers_policy.close = NULL;
|
sudoers_policy.close = NULL;
|
||||||
}
|
}
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
sudoers_policy_validate(void)
|
sudoers_policy_validate(void)
|
||||||
{
|
{
|
||||||
int prev_instance, rval;
|
|
||||||
debug_decl(sudoers_policy_validate, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_validate, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
user_cmnd = "validate";
|
user_cmnd = "validate";
|
||||||
SET(sudo_mode, MODE_VALIDATE);
|
SET(sudo_mode, MODE_VALIDATE);
|
||||||
|
|
||||||
rval = sudoers_policy_main(0, NULL, I_VERIFYPW, NULL, NULL);
|
debug_return_bool(sudoers_policy_main(0, NULL, I_VERIFYPW, NULL, NULL));
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
debug_return_bool(rval);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sudoers_policy_invalidate(int remove)
|
sudoers_policy_invalidate(int remove)
|
||||||
{
|
{
|
||||||
int prev_instance;
|
|
||||||
debug_decl(sudoers_policy_invalidate, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_invalidate, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
user_cmnd = "kill";
|
user_cmnd = "kill";
|
||||||
remove_timestamp(remove);
|
remove_timestamp(remove);
|
||||||
sudoers_cleanup();
|
sudoers_cleanup();
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
|
|
||||||
debug_return;
|
debug_return;
|
||||||
}
|
}
|
||||||
@@ -693,11 +668,9 @@ static int
|
|||||||
sudoers_policy_list(int argc, char * const argv[], int verbose,
|
sudoers_policy_list(int argc, char * const argv[], int verbose,
|
||||||
const char *list_user)
|
const char *list_user)
|
||||||
{
|
{
|
||||||
int prev_instance, rval = -1;
|
int rval;
|
||||||
debug_decl(sudoers_policy_list, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_list, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
user_cmnd = "list";
|
user_cmnd = "list";
|
||||||
if (argc)
|
if (argc)
|
||||||
SET(sudo_mode, MODE_CHECK);
|
SET(sudo_mode, MODE_CHECK);
|
||||||
@@ -709,7 +682,7 @@ sudoers_policy_list(int argc, char * const argv[], int verbose,
|
|||||||
list_pw = sudo_getpwnam(list_user);
|
list_pw = sudo_getpwnam(list_user);
|
||||||
if (list_pw == NULL) {
|
if (list_pw == NULL) {
|
||||||
sudo_warnx(U_("unknown user: %s"), list_user);
|
sudo_warnx(U_("unknown user: %s"), list_user);
|
||||||
goto done;
|
debug_return_bool(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rval = sudoers_policy_main(argc, argv, I_LISTPW, NULL, NULL);
|
rval = sudoers_policy_main(argc, argv, I_LISTPW, NULL, NULL);
|
||||||
@@ -718,19 +691,14 @@ sudoers_policy_list(int argc, char * const argv[], int verbose,
|
|||||||
list_pw = NULL;
|
list_pw = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
sudoers_policy_version(int verbose)
|
sudoers_policy_version(int verbose)
|
||||||
{
|
{
|
||||||
int prev_instance;
|
|
||||||
debug_decl(sudoers_policy_version, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
debug_decl(sudoers_policy_version, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
sudo_printf(SUDO_CONV_INFO_MSG, _("Sudoers policy plugin version %s\n"),
|
sudo_printf(SUDO_CONV_INFO_MSG, _("Sudoers policy plugin version %s\n"),
|
||||||
PACKAGE_VERSION);
|
PACKAGE_VERSION);
|
||||||
sudo_printf(SUDO_CONV_INFO_MSG, _("Sudoers file grammar version %d\n"),
|
sudo_printf(SUDO_CONV_INFO_MSG, _("Sudoers file grammar version %d\n"),
|
||||||
@@ -753,18 +721,17 @@ sudoers_policy_version(int verbose)
|
|||||||
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
sudo_printf(SUDO_CONV_INFO_MSG, "\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register environment function hooks.
|
||||||
|
* Note that we have not registered sudoers with the debug subsystem yet.
|
||||||
|
*/
|
||||||
static void
|
static void
|
||||||
sudoers_policy_register_hooks(int version, int (*register_hook)(struct sudo_hook *hook))
|
sudoers_policy_register_hooks(int version, int (*register_hook)(struct sudo_hook *hook))
|
||||||
{
|
{
|
||||||
struct sudo_hook hook;
|
struct sudo_hook hook;
|
||||||
int prev_instance;
|
|
||||||
debug_decl(sudoers_policy_register_hooks, SUDOERS_DEBUG_PLUGIN, sudoers_debug_instance)
|
|
||||||
|
|
||||||
prev_instance = sudo_debug_set_default_instance(sudoers_debug_instance);
|
|
||||||
|
|
||||||
memset(&hook, 0, sizeof(hook));
|
memset(&hook, 0, sizeof(hook));
|
||||||
hook.hook_version = SUDO_HOOK_VERSION;
|
hook.hook_version = SUDO_HOOK_VERSION;
|
||||||
@@ -784,8 +751,6 @@ sudoers_policy_register_hooks(int version, int (*register_hook)(struct sudo_hook
|
|||||||
hook.hook_type = SUDO_HOOK_PUTENV;
|
hook.hook_type = SUDO_HOOK_PUTENV;
|
||||||
hook.hook_fn = sudoers_hook_putenv;
|
hook.hook_fn = sudoers_hook_putenv;
|
||||||
register_hook(&hook);
|
register_hook(&hook);
|
||||||
|
|
||||||
sudo_debug_set_default_instance(prev_instance);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
__dso_public struct policy_plugin sudoers_policy = {
|
__dso_public struct policy_plugin sudoers_policy = {
|
||||||
|
@@ -218,7 +218,10 @@ log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
||||||
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
||||||
if (plugin->u.io->log_ttyin) {
|
if (plugin->u.io->log_ttyin) {
|
||||||
int rc = plugin->u.io->log_ttyin(buf, n);
|
int rc;
|
||||||
|
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rc = plugin->u.io->log_ttyin(buf, n);
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
/* Error: disable plugin's I/O function. */
|
/* Error: disable plugin's I/O function. */
|
||||||
@@ -229,6 +232,7 @@ log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
sigprocmask(SIG_SETMASK, &omask, NULL);
|
sigprocmask(SIG_SETMASK, &omask, NULL);
|
||||||
|
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
@@ -246,7 +250,10 @@ log_stdin(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
||||||
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
||||||
if (plugin->u.io->log_stdin) {
|
if (plugin->u.io->log_stdin) {
|
||||||
int rc = plugin->u.io->log_stdin(buf, n);
|
int rc;
|
||||||
|
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rc = plugin->u.io->log_stdin(buf, n);
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
/* Error: disable plugin's I/O function. */
|
/* Error: disable plugin's I/O function. */
|
||||||
@@ -257,6 +264,7 @@ log_stdin(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
sigprocmask(SIG_SETMASK, &omask, NULL);
|
sigprocmask(SIG_SETMASK, &omask, NULL);
|
||||||
|
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
@@ -274,7 +282,10 @@ log_ttyout(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
||||||
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
||||||
if (plugin->u.io->log_ttyout) {
|
if (plugin->u.io->log_ttyout) {
|
||||||
int rc = plugin->u.io->log_ttyout(buf, n);
|
int rc;
|
||||||
|
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rc = plugin->u.io->log_ttyout(buf, n);
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
/* Error: disable plugin's I/O function. */
|
/* Error: disable plugin's I/O function. */
|
||||||
@@ -285,6 +296,7 @@ log_ttyout(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
if (!rval) {
|
if (!rval) {
|
||||||
/*
|
/*
|
||||||
* I/O plugin rejected the output, delete the write event
|
* I/O plugin rejected the output, delete the write event
|
||||||
@@ -314,7 +326,10 @@ log_stdout(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
||||||
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
||||||
if (plugin->u.io->log_stdout) {
|
if (plugin->u.io->log_stdout) {
|
||||||
int rc = plugin->u.io->log_stdout(buf, n);
|
int rc;
|
||||||
|
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rc = plugin->u.io->log_stdout(buf, n);
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
/* Error: disable plugin's I/O function. */
|
/* Error: disable plugin's I/O function. */
|
||||||
@@ -325,6 +340,7 @@ log_stdout(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
if (!rval) {
|
if (!rval) {
|
||||||
/*
|
/*
|
||||||
* I/O plugin rejected the output, delete the write event
|
* I/O plugin rejected the output, delete the write event
|
||||||
@@ -354,7 +370,10 @@ log_stderr(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
sigprocmask(SIG_BLOCK, &ttyblock, &omask);
|
||||||
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
TAILQ_FOREACH(plugin, &io_plugins, entries) {
|
||||||
if (plugin->u.io->log_stderr) {
|
if (plugin->u.io->log_stderr) {
|
||||||
int rc = plugin->u.io->log_stderr(buf, n);
|
int rc;
|
||||||
|
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rc = plugin->u.io->log_stderr(buf, n);
|
||||||
if (rc <= 0) {
|
if (rc <= 0) {
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
/* Error: disable plugin's I/O function. */
|
/* Error: disable plugin's I/O function. */
|
||||||
@@ -365,6 +384,7 @@ log_stderr(const char *buf, unsigned int n, struct io_buffer *iob)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
if (!rval) {
|
if (!rval) {
|
||||||
/*
|
/*
|
||||||
* I/O plugin rejected the output, delete the write event
|
* I/O plugin rejected the output, delete the write event
|
||||||
|
@@ -238,6 +238,7 @@ sudo_load_plugin(struct plugin_container *policy_plugin,
|
|||||||
policy_plugin->path = sudo_estrdup(path);
|
policy_plugin->path = sudo_estrdup(path);
|
||||||
policy_plugin->name = info->symbol_name;
|
policy_plugin->name = info->symbol_name;
|
||||||
policy_plugin->options = info->options;
|
policy_plugin->options = info->options;
|
||||||
|
policy_plugin->debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER;
|
||||||
policy_plugin->u.generic = plugin;
|
policy_plugin->u.generic = plugin;
|
||||||
TAILQ_INIT(&policy_plugin->debug_files);
|
TAILQ_INIT(&policy_plugin->debug_files);
|
||||||
TAILQ_SWAP(&policy_plugin->debug_files, &info->debug_files,
|
TAILQ_SWAP(&policy_plugin->debug_files, &info->debug_files,
|
||||||
@@ -260,6 +261,7 @@ sudo_load_plugin(struct plugin_container *policy_plugin,
|
|||||||
container->path = sudo_estrdup(path);
|
container->path = sudo_estrdup(path);
|
||||||
container->name = info->symbol_name;
|
container->name = info->symbol_name;
|
||||||
container->options = info->options;
|
container->options = info->options;
|
||||||
|
container->debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER;
|
||||||
container->u.generic = plugin;
|
container->u.generic = plugin;
|
||||||
TAILQ_INIT(&container->debug_files);
|
TAILQ_INIT(&container->debug_files);
|
||||||
TAILQ_SWAP(&container->debug_files, &info->debug_files,
|
TAILQ_SWAP(&container->debug_files, &info->debug_files,
|
||||||
@@ -329,6 +331,7 @@ sudo_load_plugins(struct plugin_container *policy_plugin,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Install hooks (XXX - later). */
|
/* Install hooks (XXX - later). */
|
||||||
|
sudo_debug_set_default_instance(SUDO_DEBUG_INSTANCE_INITIALIZER);
|
||||||
if (policy_plugin->u.policy->version >= SUDO_API_MKVERSION(1, 2)) {
|
if (policy_plugin->u.policy->version >= SUDO_API_MKVERSION(1, 2)) {
|
||||||
if (policy_plugin->u.policy->register_hooks != NULL)
|
if (policy_plugin->u.policy->register_hooks != NULL)
|
||||||
policy_plugin->u.policy->register_hooks(SUDO_HOOK_VERSION, register_hook);
|
policy_plugin->u.policy->register_hooks(SUDO_HOOK_VERSION, register_hook);
|
||||||
@@ -339,6 +342,7 @@ sudo_load_plugins(struct plugin_container *policy_plugin,
|
|||||||
container->u.io->register_hooks(SUDO_HOOK_VERSION, register_hook);
|
container->u.io->register_hooks(SUDO_HOOK_VERSION, register_hook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
|
62
src/sudo.c
62
src/sudo.c
@@ -1145,6 +1145,7 @@ policy_open(struct plugin_container *plugin, struct sudo_settings *settings,
|
|||||||
/*
|
/*
|
||||||
* Backwards compatibility for older API versions
|
* Backwards compatibility for older API versions
|
||||||
*/
|
*/
|
||||||
|
sudo_debug_set_default_instance(SUDO_DEBUG_INSTANCE_INITIALIZER);
|
||||||
switch (plugin->u.generic->version) {
|
switch (plugin->u.generic->version) {
|
||||||
case SUDO_API_MKVERSION(1, 0):
|
case SUDO_API_MKVERSION(1, 0):
|
||||||
case SUDO_API_MKVERSION(1, 1):
|
case SUDO_API_MKVERSION(1, 1):
|
||||||
@@ -1158,6 +1159,10 @@ policy_open(struct plugin_container *plugin, struct sudo_settings *settings,
|
|||||||
plugin->options);
|
plugin->options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Stash plugin debug instance ID if set in open() function. */
|
||||||
|
plugin->debug_instance = sudo_debug_get_default_instance();
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1166,7 +1171,9 @@ policy_close(struct plugin_container *plugin, int exit_status, int error_code)
|
|||||||
{
|
{
|
||||||
debug_decl(policy_close, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
debug_decl(policy_close, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
||||||
if (plugin->u.policy->close != NULL) {
|
if (plugin->u.policy->close != NULL) {
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
plugin->u.policy->close(exit_status, error_code);
|
plugin->u.policy->close(exit_status, error_code);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
} else if (error_code) {
|
} else if (error_code) {
|
||||||
errno = error_code;
|
errno = error_code;
|
||||||
sudo_warn(U_("unable to execute %s"), command_details.command);
|
sudo_warn(U_("unable to execute %s"), command_details.command);
|
||||||
@@ -1177,10 +1184,15 @@ policy_close(struct plugin_container *plugin, int exit_status, int error_code)
|
|||||||
static int
|
static int
|
||||||
policy_show_version(struct plugin_container *plugin, int verbose)
|
policy_show_version(struct plugin_container *plugin, int verbose)
|
||||||
{
|
{
|
||||||
|
int rval;
|
||||||
debug_decl(policy_show_version, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
debug_decl(policy_show_version, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
||||||
|
|
||||||
if (plugin->u.policy->show_version == NULL)
|
if (plugin->u.policy->show_version == NULL)
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
debug_return_bool(plugin->u.policy->show_version(verbose));
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rval = plugin->u.policy->show_version(verbose);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -1188,38 +1200,53 @@ policy_check(struct plugin_container *plugin, int argc, char * const argv[],
|
|||||||
char *env_add[], char **command_info[], char **argv_out[],
|
char *env_add[], char **command_info[], char **argv_out[],
|
||||||
char **user_env_out[])
|
char **user_env_out[])
|
||||||
{
|
{
|
||||||
|
int rval;
|
||||||
debug_decl(policy_check, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
debug_decl(policy_check, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
||||||
|
|
||||||
if (plugin->u.policy->check_policy == NULL) {
|
if (plugin->u.policy->check_policy == NULL) {
|
||||||
sudo_fatalx(U_("policy plugin %s is missing the `check_policy' method"),
|
sudo_fatalx(U_("policy plugin %s is missing the `check_policy' method"),
|
||||||
plugin->name);
|
plugin->name);
|
||||||
}
|
}
|
||||||
debug_return_bool(plugin->u.policy->check_policy(argc, argv, env_add,
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
command_info, argv_out, user_env_out));
|
rval = plugin->u.policy->check_policy(argc, argv, env_add, command_info,
|
||||||
|
argv_out, user_env_out);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
policy_list(struct plugin_container *plugin, int argc, char * const argv[],
|
policy_list(struct plugin_container *plugin, int argc, char * const argv[],
|
||||||
int verbose, const char *list_user)
|
int verbose, const char *list_user)
|
||||||
{
|
{
|
||||||
|
int rval;
|
||||||
debug_decl(policy_list, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
debug_decl(policy_list, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
||||||
|
|
||||||
if (plugin->u.policy->list == NULL) {
|
if (plugin->u.policy->list == NULL) {
|
||||||
sudo_warnx(U_("policy plugin %s does not support listing privileges"),
|
sudo_warnx(U_("policy plugin %s does not support listing privileges"),
|
||||||
plugin->name);
|
plugin->name);
|
||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
}
|
}
|
||||||
debug_return_bool(plugin->u.policy->list(argc, argv, verbose, list_user));
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rval = plugin->u.policy->list(argc, argv, verbose, list_user);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
policy_validate(struct plugin_container *plugin)
|
policy_validate(struct plugin_container *plugin)
|
||||||
{
|
{
|
||||||
|
int rval;
|
||||||
debug_decl(policy_validate, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
debug_decl(policy_validate, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
||||||
|
|
||||||
if (plugin->u.policy->validate == NULL) {
|
if (plugin->u.policy->validate == NULL) {
|
||||||
sudo_warnx(U_("policy plugin %s does not support the -v option"),
|
sudo_warnx(U_("policy plugin %s does not support the -v option"),
|
||||||
plugin->name);
|
plugin->name);
|
||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
}
|
}
|
||||||
debug_return_bool(plugin->u.policy->validate());
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rval = plugin->u.policy->validate();
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1230,7 +1257,9 @@ policy_invalidate(struct plugin_container *plugin, int remove)
|
|||||||
sudo_fatalx(U_("policy plugin %s does not support the -k/-K options"),
|
sudo_fatalx(U_("policy plugin %s does not support the -k/-K options"),
|
||||||
plugin->name);
|
plugin->name);
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
plugin->u.policy->invalidate(remove);
|
plugin->u.policy->invalidate(remove);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
debug_return;
|
debug_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1244,6 +1273,7 @@ policy_init_session(struct command_details *details)
|
|||||||
/*
|
/*
|
||||||
* Backwards compatibility for older API versions
|
* Backwards compatibility for older API versions
|
||||||
*/
|
*/
|
||||||
|
sudo_debug_set_default_instance(policy_plugin.debug_instance);
|
||||||
switch (policy_plugin.u.generic->version) {
|
switch (policy_plugin.u.generic->version) {
|
||||||
case SUDO_API_MKVERSION(1, 0):
|
case SUDO_API_MKVERSION(1, 0):
|
||||||
case SUDO_API_MKVERSION(1, 1):
|
case SUDO_API_MKVERSION(1, 1):
|
||||||
@@ -1253,6 +1283,7 @@ policy_init_session(struct command_details *details)
|
|||||||
rval = policy_plugin.u.policy->init_session(details->pw,
|
rval = policy_plugin.u.policy->init_session(details->pw,
|
||||||
&details->envp);
|
&details->envp);
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
}
|
}
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
@@ -1274,6 +1305,7 @@ iolog_open(struct plugin_container *plugin, struct sudo_settings *settings,
|
|||||||
/*
|
/*
|
||||||
* Backwards compatibility for older API versions
|
* Backwards compatibility for older API versions
|
||||||
*/
|
*/
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
switch (plugin->u.generic->version) {
|
switch (plugin->u.generic->version) {
|
||||||
case SUDO_API_MKVERSION(1, 0):
|
case SUDO_API_MKVERSION(1, 0):
|
||||||
rval = plugin->u.io_1_0->open(plugin->u.io_1_0->version,
|
rval = plugin->u.io_1_0->open(plugin->u.io_1_0->version,
|
||||||
@@ -1290,6 +1322,7 @@ iolog_open(struct plugin_container *plugin, struct sudo_settings *settings,
|
|||||||
sudo_conversation_printf, plugin_settings, user_info, command_info,
|
sudo_conversation_printf, plugin_settings, user_info, command_info,
|
||||||
argc, argv, user_env, plugin->options);
|
argc, argv, user_env, plugin->options);
|
||||||
}
|
}
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
debug_return_bool(rval);
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1297,18 +1330,28 @@ static void
|
|||||||
iolog_close(struct plugin_container *plugin, int exit_status, int error_code)
|
iolog_close(struct plugin_container *plugin, int exit_status, int error_code)
|
||||||
{
|
{
|
||||||
debug_decl(iolog_close, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
debug_decl(iolog_close, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
||||||
if (plugin->u.io->close != NULL)
|
|
||||||
|
if (plugin->u.io->close != NULL) {
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
plugin->u.io->close(exit_status, error_code);
|
plugin->u.io->close(exit_status, error_code);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
}
|
||||||
debug_return;
|
debug_return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
iolog_show_version(struct plugin_container *plugin, int verbose)
|
iolog_show_version(struct plugin_container *plugin, int verbose)
|
||||||
{
|
{
|
||||||
|
int rval;
|
||||||
debug_decl(iolog_show_version, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
debug_decl(iolog_show_version, SUDO_DEBUG_PCOMM, sudo_debug_instance)
|
||||||
|
|
||||||
if (plugin->u.io->show_version == NULL)
|
if (plugin->u.io->show_version == NULL)
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
debug_return_bool(plugin->u.io->show_version(verbose));
|
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
|
rval = plugin->u.io->show_version(verbose);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
debug_return_bool(rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1322,9 +1365,12 @@ iolog_unlink(struct plugin_container *plugin)
|
|||||||
|
|
||||||
/* Deregister hooks, if any. */
|
/* Deregister hooks, if any. */
|
||||||
if (plugin->u.io->version >= SUDO_API_MKVERSION(1, 2)) {
|
if (plugin->u.io->version >= SUDO_API_MKVERSION(1, 2)) {
|
||||||
if (plugin->u.io->deregister_hooks != NULL)
|
if (plugin->u.io->deregister_hooks != NULL) {
|
||||||
|
sudo_debug_set_default_instance(plugin->debug_instance);
|
||||||
plugin->u.io->deregister_hooks(SUDO_HOOK_VERSION,
|
plugin->u.io->deregister_hooks(SUDO_HOOK_VERSION,
|
||||||
deregister_hook);
|
deregister_hook);
|
||||||
|
sudo_debug_set_default_instance(sudo_debug_instance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* Remove from io_plugins list and free. */
|
/* Remove from io_plugins list and free. */
|
||||||
TAILQ_REMOVE(&io_plugins, plugin, entries);
|
TAILQ_REMOVE(&io_plugins, plugin, entries);
|
||||||
|
@@ -87,6 +87,7 @@ struct plugin_container {
|
|||||||
const char *path;
|
const char *path;
|
||||||
char * const *options;
|
char * const *options;
|
||||||
void *handle;
|
void *handle;
|
||||||
|
int debug_instance;
|
||||||
union {
|
union {
|
||||||
struct generic_plugin *generic;
|
struct generic_plugin *generic;
|
||||||
struct policy_plugin *policy;
|
struct policy_plugin *policy;
|
||||||
|
Reference in New Issue
Block a user