summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZdenek Prikryl <zprikryl@redhat.com>2009-06-17 16:23:36 +0200
committerZdenek Prikryl <zprikryl@redhat.com>2009-06-17 16:23:36 +0200
commit085a6ceeb7d3e018ef1db0429f1883070030af1b (patch)
tree3b75fd7678165996020831e4b5e38bd25d93bdd6
parent5d157e341fed5782c1fbfdd5f820a8d349824e84 (diff)
downloadabrt-085a6ceeb7d3e018ef1db0429f1883070030af1b.tar.gz
abrt-085a6ceeb7d3e018ef1db0429f1883070030af1b.tar.xz
abrt-085a6ceeb7d3e018ef1db0429f1883070030af1b.zip
hook writes new dump only if the daemin is running
-rw-r--r--src/Hooks/CCpp.cpp41
-rw-r--r--src/Hooks/Makefile.am3
2 files changed, 43 insertions, 1 deletions
diff --git a/src/Hooks/CCpp.cpp b/src/Hooks/CCpp.cpp
index 84d023d6..1d895c24 100644
--- a/src/Hooks/CCpp.cpp
+++ b/src/Hooks/CCpp.cpp
@@ -26,6 +26,7 @@
#include <limits.h>
#include <stdio.h>
#include <sys/types.h>
+#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
#include <syslog.h>
@@ -35,6 +36,8 @@
#define FILENAME_CMDLINE "cmdline"
#define FILENAME_COREDUMP "coredump"
+#define VAR_RUN_PID_FILE VAR_RUN"/abrt.pid"
+
static void write_success_log(const char* pid)
{
openlog("abrt", 0, LOG_DAEMON);
@@ -93,6 +96,34 @@ char* get_cmdline(const char* pid)
return strdup(cmdline);
}
+#define PID_MAX 16
+
+int daemon_is_ok()
+{
+ char pid[PID_MAX];
+ char path[PATH_MAX];
+ struct stat buff;
+ FILE* fp;
+ if ((fp = fopen(VAR_RUN_PID_FILE, "r")) == NULL)
+ {
+ return 0;
+ }
+ fgets(pid, sizeof(pid), fp);
+ if (strrchr(pid, '\n') != NULL)
+ {
+ char* newline = strrchr(pid, '\n');
+ *newline = '\0';
+ }
+ snprintf(path, sizeof(path), "/proc/%s/stat", pid);
+ if (stat(path, &buff) == -1)
+ {
+ return 0;
+ }
+ fclose(fp);
+
+ return 1;
+}
+
int main(int argc, char** argv)
{
const char* program_name = argv[0];
@@ -115,6 +146,10 @@ int main(int argc, char** argv)
{
return 0;
}
+ if (!daemon_is_ok())
+ {
+ return 0;
+ }
try
{
@@ -170,6 +205,12 @@ int main(int argc, char** argv)
dd.Close();
write_success_log(pid);
}
+ catch (CABRTException& e)
+ {
+ fprintf(stderr, "%s: %s\n", program_name, e.what().c_str());
+ write_faliure_log(e.what().c_str());
+ return -2;
+ }
catch (std::exception& e)
{
fprintf(stderr, "%s: %s\n", program_name, e.what());
diff --git a/src/Hooks/Makefile.am b/src/Hooks/Makefile.am
index ba067a50..b3ca576a 100644
--- a/src/Hooks/Makefile.am
+++ b/src/Hooks/Makefile.am
@@ -4,7 +4,8 @@ libexec_PROGRAMS = hookCCpp
hookCCpp_SOURCES = CCpp.cpp
hookCCpp_LDADD = ../../lib/Utils/libABRTUtils.la
hookCCpp_CPPFLAGS = -I$(srcdir)/../../inc -I$(srcdir)/../../lib/Utils \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\"
+ -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
+ -DVAR_RUN=\"$(VAR_RUN)\"
python_PYTHON = sitecustomize.py abrt_exception_handler.py