From 1620f435dbe7013f985128dcdf001e9158cb00e3 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Sun, 8 May 2016 14:41:35 +0200 Subject: MONITOR: Remove the no longer used diag_cmd command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After introducing the watchdog, the diag_cmd is longer used and makes no sense trying to make it usable by watchdog as the result of "pstack %p" seems next to useless in this context. Related: https://fedorahosted.org/sssd/ticket/3051 Reviewed-by: Petr Čech --- src/confdb/confdb.h | 1 - src/monitor/monitor.c | 163 -------------------------------------------------- 2 files changed, 164 deletions(-) diff --git a/src/confdb/confdb.h b/src/confdb/confdb.h index 72adbd80e..58a085ba9 100644 --- a/src/confdb/confdb.h +++ b/src/confdb/confdb.h @@ -73,7 +73,6 @@ #define CONFDB_MONITOR_DEFAULT_DOMAIN "default_domain_suffix" #define CONFDB_MONITOR_OVERRIDE_SPACE "override_space" #define CONFDB_MONITOR_USER_RUNAS "user" -#define CONFDB_MONITOR_PRE_KILL_CMD "diag_cmd" #define CONFDB_MONITOR_CERT_VERIFICATION "certificate_verification" /* Both monitor and domains */ diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c index 7a9ef569b..f97b2a960 100644 --- a/src/monitor/monitor.c +++ b/src/monitor/monitor.c @@ -112,7 +112,6 @@ struct mt_svc { char *identity; pid_t pid; - char *diag_cmd; int kill_time; struct tevent_timer *kill_timer; @@ -373,77 +372,6 @@ static int add_svc_conn_spy(struct mt_svc *svc) return EOK; } -static char *expand_diag_cmd(struct mt_svc *svc, - const char *template) -{ - TALLOC_CTX *tmp_ctx = NULL; - char *copy; - char *p_copy; - char *n; - char *result = NULL; - char action; - char *res = NULL; - - if (template == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "Missing template.\n"); - return NULL; - } - - tmp_ctx = talloc_new(NULL); - if (!tmp_ctx) return NULL; - - copy = talloc_strdup(tmp_ctx, template); - if (copy == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "talloc_strdup failed.\n"); - goto done; - } - - result = talloc_strdup(tmp_ctx, ""); - if (result == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "talloc_strdup failed.\n"); - goto done; - } - - p_copy = copy; - while ((n = strchr(p_copy, '%')) != NULL) { - *n = '\0'; - n++; - if ( *n == '\0' ) { - DEBUG(SSSDBG_CRIT_FAILURE, - "format error, single %% at the end of the template.\n"); - goto done; - } - - action = *n; - switch (action) { - case 'p': - result = talloc_asprintf_append(result, "%s%d", p_copy, svc->pid); - break; - default: - DEBUG(SSSDBG_CRIT_FAILURE, - "format error, unknown template [%%%c].\n", *n); - goto done; - } - - if (result == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "talloc_asprintf_append failed.\n"); - goto done; - } - - p_copy = n + 1; - } - - result = talloc_asprintf_append(result, "%s", p_copy); - if (result == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, "talloc_asprintf_append failed.\n"); - goto done; - } - - res = talloc_move(svc, &result); -done: - talloc_zfree(tmp_ctx); - return res; -} static void svc_child_info(struct mt_svc *svc, int wait_status) { @@ -467,82 +395,6 @@ static void svc_child_info(struct mt_svc *svc, int wait_status) } } -static void svc_diag_cmd_exit_handler(int pid, int wait_status, void *pvt) -{ - struct mt_svc *svc = talloc_get_type(pvt, struct mt_svc); - - svc_child_info(svc, wait_status); -} - -static void svc_run_diag_cmd(struct mt_svc *svc) -{ - pid_t pkc_pid; - char **args; - int ret; - int debug_fd; - char *diag_cmd; - struct sss_child_ctx *diag_child_ctx; - - if (svc->diag_cmd == NULL) { - return; - } - - pkc_pid = fork(); - if (pkc_pid != 0) { - /* parent, schedule SIGKILL */ - - ret = sss_child_register(svc, - svc->mt_ctx->sigchld_ctx, - pkc_pid, - svc_diag_cmd_exit_handler, - svc, - &diag_child_ctx); - if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, "Cannot register child %d\n", pkc_pid); - /* Try to go on ... */ - } - - return; - } - - /* child, execute diagnostics */ - diag_cmd = expand_diag_cmd(svc, svc->diag_cmd); - if (diag_cmd == NULL) { - DEBUG(SSSDBG_CRIT_FAILURE, - "Failed to expand [%s]\n", svc->diag_cmd); - _exit(1); - } - - if (debug_level >= SSSDBG_TRACE_LIBS) { - debug_fd = get_fd_from_debug_file(); - ret = dup2(debug_fd, STDERR_FILENO); - if (ret == -1) { - ret = errno; - DEBUG(SSSDBG_MINOR_FAILURE, - "dup2 failed for stderr [%d][%s].\n", ret, sss_strerror(ret)); - /* failure to redirect stderr is not fatal */ - } - - ret = dup2(debug_fd, STDOUT_FILENO); - if (ret == -1) { - ret = errno; - DEBUG(SSSDBG_MINOR_FAILURE, - "dup2 failed for stdout [%d][%s].\n", ret, sss_strerror(ret)); - /* failure to redirect stdout is not fatal */ - } - } - - args = parse_args(diag_cmd); - execvp(args[0], args); - - /* If we are here, exec() has failed - * Print errno and abort quickly */ - ret = errno; - DEBUG(SSSDBG_FATAL_FAILURE, - "Could not exec %s, reason: %s\n", svc->diag_cmd, strerror(ret)); - _exit(1); -} - static int mark_service_as_started(struct mt_svc *svc) { struct mt_ctx *ctx = svc->mt_ctx; @@ -712,8 +564,6 @@ static int monitor_kill_service (struct mt_svc *svc) return EOK; } - svc_run_diag_cmd(svc); - /* Set up a timer to send SIGKILL if this process * doesn't exit within the configured interval */ @@ -1147,19 +997,6 @@ static errno_t get_kill_config(struct mt_ctx *ctx, const char *path, { errno_t ret; - ret = confdb_get_string(ctx->cdb, svc, path, - CONFDB_MONITOR_PRE_KILL_CMD, - NULL, &svc->diag_cmd); - if (ret != EOK) { - DEBUG(SSSDBG_CRIT_FAILURE, - "Failed to get diagnostics command for %s\n", svc->name); - return ret; - } - if (svc->diag_cmd) { - DEBUG(SSSDBG_CONF_SETTINGS, - "Diagnostics command: [%s]\n", svc->diag_cmd); - } - ret = confdb_get_int(ctx->cdb, path, CONFDB_SERVICE_FORCE_TIMEOUT, MONITOR_DEF_FORCE_TIME, &svc->kill_time); -- cgit