|
|
ed0026 |
commit 5a743a9378faf251d03f19f37facd2ddfc19989b
|
|
|
ed0026 |
Author: Andrew Beekhof <andrew@beekhof.net>
|
|
|
ed0026 |
Date: Tue Aug 6 13:36:45 2013 +1000
|
|
|
ed0026 |
|
|
|
ed0026 |
Fix: Command-line tools should stop after an assertion failure
|
|
|
ed0026 |
|
|
|
ed0026 |
(cherry picked from commit 912db519b293ab18840c36e0b5d91b3ee6e205dd)
|
|
|
ed0026 |
|
|
|
ed0026 |
diff --git a/lib/common/logging.c b/lib/common/logging.c
|
|
|
ed0026 |
index 0b85093..571cd03 100644
|
|
|
ed0026 |
--- a/lib/common/logging.c
|
|
|
ed0026 |
+++ b/lib/common/logging.c
|
|
|
ed0026 |
@@ -46,6 +46,7 @@ unsigned int crm_log_priority = LOG_NOTICE;
|
|
|
ed0026 |
unsigned int crm_log_level = LOG_INFO;
|
|
|
ed0026 |
static gboolean crm_tracing_enabled(void);
|
|
|
ed0026 |
unsigned int crm_trace_nonlog = 0;
|
|
|
ed0026 |
+bool crm_is_daemon = 0;
|
|
|
ed0026 |
|
|
|
ed0026 |
#ifdef HAVE_G_LOG_SET_DEFAULT_HANDLER
|
|
|
ed0026 |
GLogFunc glib_log_default;
|
|
|
ed0026 |
@@ -626,6 +627,8 @@ crm_log_init(const char *entity, int level, gboolean daemon, gboolean to_stderr,
|
|
|
ed0026 |
const char *facility = daemon_option("logfacility");
|
|
|
ed0026 |
const char *f_copy = facility;
|
|
|
ed0026 |
|
|
|
ed0026 |
+ crm_is_daemon = daemon;
|
|
|
ed0026 |
+
|
|
|
ed0026 |
if (crm_trace_nonlog == 0) {
|
|
|
ed0026 |
crm_trace_nonlog = g_quark_from_static_string("Pacemaker non-logging tracepoint");
|
|
|
ed0026 |
}
|
|
|
ed0026 |
@@ -711,11 +714,11 @@ crm_log_init(const char *entity, int level, gboolean daemon, gboolean to_stderr,
|
|
|
ed0026 |
qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_ENABLED, QB_FALSE);
|
|
|
ed0026 |
}
|
|
|
ed0026 |
|
|
|
ed0026 |
- if (daemon) {
|
|
|
ed0026 |
+ if (crm_is_daemon) {
|
|
|
ed0026 |
set_daemon_option("logfacility", facility);
|
|
|
ed0026 |
}
|
|
|
ed0026 |
|
|
|
ed0026 |
- if (daemon && crm_tracing_enabled()
|
|
|
ed0026 |
+ if (crm_is_daemon && crm_tracing_enabled()
|
|
|
ed0026 |
&& qb_log_ctl(QB_LOG_STDERR, QB_LOG_CONF_STATE_GET, 0) != QB_LOG_STATE_ENABLED
|
|
|
ed0026 |
&& qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_STATE_GET, 0) != QB_LOG_STATE_ENABLED) {
|
|
|
ed0026 |
/* Make sure tracing goes somewhere */
|
|
|
ed0026 |
@@ -725,20 +728,20 @@ crm_log_init(const char *entity, int level, gboolean daemon, gboolean to_stderr,
|
|
|
ed0026 |
crm_update_callsites();
|
|
|
ed0026 |
|
|
|
ed0026 |
/* Ok, now we can start logging... */
|
|
|
ed0026 |
- if (quiet == FALSE && daemon == FALSE) {
|
|
|
ed0026 |
+ if (quiet == FALSE && crm_is_daemon == FALSE) {
|
|
|
ed0026 |
crm_log_args(argc, argv);
|
|
|
ed0026 |
}
|
|
|
ed0026 |
|
|
|
ed0026 |
- if (daemon) {
|
|
|
ed0026 |
+ if (crm_is_daemon) {
|
|
|
ed0026 |
const char *user = getenv("USER");
|
|
|
ed0026 |
|
|
|
ed0026 |
if (user != NULL && safe_str_neq(user, "root") && safe_str_neq(user, CRM_DAEMON_USER)) {
|
|
|
ed0026 |
crm_trace("Not switching to corefile directory for %s", user);
|
|
|
ed0026 |
- daemon = FALSE;
|
|
|
ed0026 |
+ crm_is_daemon = FALSE;
|
|
|
ed0026 |
}
|
|
|
ed0026 |
}
|
|
|
ed0026 |
|
|
|
ed0026 |
- if (daemon) {
|
|
|
ed0026 |
+ if (crm_is_daemon) {
|
|
|
ed0026 |
int user = getuid();
|
|
|
ed0026 |
const char *base = CRM_CORE_DIR;
|
|
|
ed0026 |
struct passwd *pwent = getpwuid(user);
|
|
|
ed0026 |
diff --git a/lib/common/utils.c b/lib/common/utils.c
|
|
|
ed0026 |
index 069b5c8..527c9e0 100644
|
|
|
ed0026 |
--- a/lib/common/utils.c
|
|
|
ed0026 |
+++ b/lib/common/utils.c
|
|
|
ed0026 |
@@ -1085,6 +1085,8 @@ filter_reload_parameters(xmlNode * param_set, const char *restart_string)
|
|
|
ed0026 |
}
|
|
|
ed0026 |
}
|
|
|
ed0026 |
|
|
|
ed0026 |
+extern bool crm_is_daemon;
|
|
|
ed0026 |
+
|
|
|
ed0026 |
/* coverity[+kill] */
|
|
|
ed0026 |
void
|
|
|
ed0026 |
crm_abort(const char *file, const char *function, int line,
|
|
|
ed0026 |
@@ -1097,6 +1099,14 @@ crm_abort(const char *file, const char *function, int line,
|
|
|
ed0026 |
/* Implied by the parent's error logging below */
|
|
|
ed0026 |
/* crm_write_blackbox(0); */
|
|
|
ed0026 |
|
|
|
ed0026 |
+ if(crm_is_daemon == FALSE) {
|
|
|
ed0026 |
+ /* This is a command line tool - do not fork */
|
|
|
ed0026 |
+
|
|
|
ed0026 |
+ /* crm_add_logfile(NULL); * Record it to a file? */
|
|
|
ed0026 |
+ crm_enable_stderr(TRUE); /* Make sure stderr is enabled so we can tell the caller */
|
|
|
ed0026 |
+ do_fork = FALSE; /* Just crash if needed */
|
|
|
ed0026 |
+ }
|
|
|
ed0026 |
+
|
|
|
ed0026 |
if (do_core == FALSE) {
|
|
|
ed0026 |
crm_err("%s: Triggered assert at %s:%d : %s", function, file, line, assert_condition);
|
|
|
ed0026 |
return;
|