From 9bbdff4c7e766743a74e204f464f75936656fae7 Mon Sep 17 00:00:00 2001
From: Nikola Pajkovsky <npajkovs@redhat.com>
Date: Wed, 20 Jul 2011 14:45:42 +0200
Subject: [PATCH] rhbz#671354 - [RFE] Configurable core dump location
Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
(cherry picked from commit 6c1e469bb663bde9501ed62dbec68fbff65aadbf)
Conflicts:
src/cli/Makefile.am
src/cli/list.c
src/hooks/abrt-hook-ccpp.c
src/lib/Makefile.am
src/lib/abrt_conf.c
diff --git a/configure.ac b/configure.ac
index d53bcd1..21cc302 100644
--- a/configure.ac
+++ b/configure.ac
@@ -100,14 +100,8 @@ PLUGINS_LIB_DIR='${libdir}/${PACKAGE_NAME}'
ENABLE_SOCKET_OR_DBUS='-DENABLE_DBUS=1'
LIBEXEC_DIR='${libexecdir}'
-DEBUG_DUMPS_DIR='${localstatedir}/spool/${PACKAGE_NAME}'
DEBUG_INFO_DIR='${localstatedir}/cache/${PACKAGE_NAME}-di'
-AC_ARG_WITH(debugdumpsdir,
- [AS_HELP_STRING([--with-debugdumpdir=DIR],
- [Directory where debugdumps are created])],
- [DEBUG_DUMPS_DIR="$withval"])
-
AC_ARG_WITH(debuginfosdir,
[AS_HELP_STRING([--with-debuginfodir=DIR],
[Directory where debuginfo is stored])],
@@ -120,7 +114,6 @@ AC_SUBST(REPORT_PLUGINS_CONF_DIR)
AC_SUBST(EVENTS_CONF_DIR)
AC_SUBST(EVENTS_DIR)
AC_SUBST(PLUGINS_LIB_DIR)
-AC_SUBST(DEBUG_DUMPS_DIR)
AC_SUBST(DEBUG_INFO_DIR)
AC_SUBST(LIBEXEC_DIR)
diff --git a/src/applet/Makefile.am b/src/applet/Makefile.am
index db5266d..247bee2 100644
--- a/src/applet/Makefile.am
+++ b/src/applet/Makefile.am
@@ -9,7 +9,6 @@ abrt_applet_CPPFLAGS = \
-DBIN_DIR=\"$(bindir)\" \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
-DICON_DIR=\"${datadir}/abrt/icons/hicolor/48x48/status\" \
diff --git a/src/daemon/Makefile.am b/src/daemon/Makefile.am
index 9f4db01..70a1641 100644
--- a/src/daemon/Makefile.am
+++ b/src/daemon/Makefile.am
@@ -23,7 +23,6 @@ abrtd_CPPFLAGS = \
-DBIN_DIR=\"$(bindir)\" \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -47,7 +46,6 @@ abrt_server_CPPFLAGS = \
-DBIN_DIR=\"$(bindir)\" \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -69,7 +67,6 @@ abrt_action_save_package_data_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
diff --git a/src/daemon/abrt-server.c b/src/daemon/abrt-server.c
index 8153ad6..78e4ebd 100644
--- a/src/daemon/abrt-server.c
+++ b/src/daemon/abrt-server.c
@@ -100,7 +100,8 @@ static int create_debug_dump()
This directory is renamed to final directory name after
all files have been stored into it.
*/
- char *path = xasprintf(DEBUG_DUMPS_DIR"/%s-%s-%u.new",
+ char *path = xasprintf("%s/%s-%s-%u.new",
+ g_settings_dump_location,
dir_basename,
iso_date_string(NULL),
pid);
@@ -150,8 +151,8 @@ static int create_debug_dump()
*/
unsigned maxsize = g_settings_nMaxCrashReportsSize + g_settings_nMaxCrashReportsSize / 4;
maxsize |= 63;
- check_free_space(maxsize);
- trim_debug_dumps(DEBUG_DUMPS_DIR, maxsize * (double)(1024*1024), path);
+ check_free_space(maxsize, g_settings_dump_location);
+ trim_debug_dumps(g_settings_dump_location, maxsize * (double)(1024*1024), path);
}
free(path);
@@ -162,15 +163,19 @@ static int create_debug_dump()
/* Remove dump dir */
static int delete_path(const char *dump_dir_name)
{
- /* If doesn't start with "DEBUG_DUMPS_DIR/"... */
- if (strncmp(dump_dir_name, DEBUG_DUMPS_DIR"/", strlen(DEBUG_DUMPS_DIR"/")) != 0
+ /* If doesn't start with "g_settings_dump_location/"... */
+ char *dump_location = xasprintf("%s/", g_settings_dump_location);
+ log("%s", dump_location);
+ if (strncmp(dump_dir_name, dump_location, strlen(dump_location)) != 0
/* or contains "/." anywhere (-> might contain ".." component) */
- || strstr(dump_dir_name + strlen(DEBUG_DUMPS_DIR), "/.")
+ || strstr(dump_dir_name + strlen(g_settings_dump_location), "/.")
) {
/* Then refuse to operate on it (someone is attacking us??) */
error_msg("Bad dump directory name '%s', not deleting", dump_dir_name);
+ free(dump_location);
return 400; /* Bad Request */
}
+ free(dump_location);
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
if (!dd)
@@ -491,10 +496,14 @@ int main(int argc, char **argv)
client_uid = cr.uid;
}
+ load_abrt_conf();
+
int r = perform_http_xact();
if (r == 0)
r = 200;
+ free_abrt_conf_data();
+
printf("HTTP/1.1 %u \r\n\r\n", r);
return (r >= 400); /* Error if 400+ */
diff --git a/src/daemon/abrt.conf b/src/daemon/abrt.conf
index cb0dbbb..58a7019 100644
--- a/src/daemon/abrt.conf
+++ b/src/daemon/abrt.conf
@@ -27,3 +27,8 @@ BlackListedPaths = /usr/share/doc/*,*/example*
# Max size for crash storage [MiB] or 0 for unlimited
#
MaxCrashReportsSize = 1000
+
+# Specify where you want to store coredumps and all files which are needed for
+# reporting. (default:/var/spool/abrt)
+#
+#DumpLocation = /var/spool/abrt
diff --git a/src/daemon/abrtd.c b/src/daemon/abrtd.c
index 8a22ab8..3da3130 100644
--- a/src/daemon/abrtd.c
+++ b/src/daemon/abrtd.c
@@ -290,7 +290,7 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param)
/* Scan crash dumps looking for a dup */
//TODO: explain why this is safe wrt concurrent runs
- DIR *dir = opendir(DEBUG_DUMPS_DIR);
+ DIR *dir = opendir(g_settings_dump_location);
if (dir != NULL)
{
struct dirent *dent;
@@ -301,7 +301,7 @@ static int is_crash_a_dup(const char *dump_dir_name, void *param)
int different;
char *uid, *uuid;
- char *dump_dir_name2 = concat_path_file(DEBUG_DUMPS_DIR, dent->d_name);
+ char *dump_dir_name2 = concat_path_file(g_settings_dump_location, dent->d_name);
if (strcmp(dump_dir_name, dump_dir_name2) == 0)
goto next; /* we are never a dup of ourself */
@@ -518,7 +518,8 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin
if (fork() == 0)
{
xchdir(dir);
- execlp("abrt-handle-upload", "abrt-handle-upload", DEBUG_DUMPS_DIR, dir, name, (char*)NULL);
+ execlp("abrt-handle-upload", "abrt-handle-upload",
+ g_settings_dump_location, dir, name, (char*)NULL);
error_msg_and_die("Can't execute '%s'", "abrt-handle-upload");
}
}
@@ -543,13 +544,14 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin
{
char *worst_dir = NULL;
while (g_settings_nMaxCrashReportsSize > 0
- && get_dirsize_find_largest_dir(DEBUG_DUMPS_DIR, &worst_dir, name) / (1024*1024) >= g_settings_nMaxCrashReportsSize
+ && get_dirsize_find_largest_dir(g_settings_dump_location, &worst_dir, name) / (1024*1024) >= g_settings_nMaxCrashReportsSize
&& worst_dir
) {
- log("Size of '%s' >= %u MB, deleting '%s'", DEBUG_DUMPS_DIR, g_settings_nMaxCrashReportsSize, worst_dir);
+ log("Size of '%s' >= %u MB, deleting '%s'",
+ g_settings_dump_location, g_settings_nMaxCrashReportsSize, worst_dir);
send_dbus_sig_QuotaExceeded(_("The size of the report exceeded the quota. Please check system's MaxCrashReportsSize value in abrt.conf."));
/* deletes both directory and DB record */
- char *d = concat_path_file(DEBUG_DUMPS_DIR, worst_dir);
+ char *d = concat_path_file(g_settings_dump_location, worst_dir);
free(worst_dir);
worst_dir = NULL;
delete_dump_dir(d);
@@ -559,7 +561,7 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin
char *fullname = NULL;
problem_data_t *problem_data = NULL;
- fullname = concat_path_file(DEBUG_DUMPS_DIR, name);
+ fullname = concat_path_file(g_settings_dump_location, name);
mw_result_t res = LoadDebugDump(fullname, &problem_data);
const char *first = problem_data ? get_problem_item_content_or_NULL(problem_data, CD_DUMPDIR) : NULL;
switch (res)
@@ -693,7 +695,7 @@ static void sanitize_dump_dir_rights()
* us with thousands of bogus or malicious dumps */
/* 07000 bits are setuid, setgit, and sticky, and they must be unset */
/* 00777 bits are usual "rwxrwxrwx" access rights */
- ensure_writable_dir(DEBUG_DUMPS_DIR, 0755, "abrt");
+ ensure_writable_dir(g_settings_dump_location, 0755, "abrt");
/* debuginfo cache */
ensure_writable_dir(DEBUG_INFO_DIR, 0775, "abrt");
/* temp dir */
@@ -823,10 +825,10 @@ int main(int argc, char** argv)
perror_msg_and_die("inotify_init failed");
close_on_exec_on(inotify_fd);
- /* Watching DEBUG_DUMPS_DIR for new files... */
- if (inotify_add_watch(inotify_fd, DEBUG_DUMPS_DIR, IN_CREATE | IN_MOVED_TO) < 0)
+ /* Watching 'g_settings_dump_location' for new files... */
+ if (inotify_add_watch(inotify_fd, g_settings_dump_location, IN_CREATE | IN_MOVED_TO) < 0)
{
- perror_msg("inotify_add_watch failed on '%s'", DEBUG_DUMPS_DIR);
+ perror_msg("inotify_add_watch failed on '%s'", g_settings_dump_location);
goto init_error;
}
if (g_settings_sWatchCrashdumpArchiveDir)
diff --git a/src/gui-gtk/Makefile.am b/src/gui-gtk/Makefile.am
index 5025082..a2bb755 100644
--- a/src/gui-gtk/Makefile.am
+++ b/src/gui-gtk/Makefile.am
@@ -9,7 +9,6 @@ abrt_gui_CFLAGS = \
-DBIN_DIR=\"$(bindir)\" \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
-DICON_DIR=\"${datadir}/abrt/icons/hicolor/48x48/status\" \
@@ -25,7 +24,8 @@ abrt_gui_LDADD = \
-lglib-2.0 \
-lgthread-2.0 \
$(GTK_LIBS) \
- $(LIBREPORT_GTK_LIBS)
+ $(LIBREPORT_GTK_LIBS) \
+ ../lib/libabrt.la
# $(LIBNOTIFY_LIBS)
#test_report_SOURCES = \
diff --git a/src/gui-gtk/main.c b/src/gui-gtk/main.c
index e465d7b..2e45090 100644
--- a/src/gui-gtk/main.c
+++ b/src/gui-gtk/main.c
@@ -721,7 +721,6 @@ int main(int argc, char **argv)
"\b [-vp] [DIR]...\n"
"\n"
"Shows list of ABRT dump directories in specified DIR(s)\n"
- "(default DIRs: "DEBUG_DUMPS_DIR" $HOME/.abrt/spool)"
);
enum {
OPT_v = 1 << 0,
@@ -739,8 +738,9 @@ int main(int argc, char **argv)
GtkWidget *main_window = create_main_window();
+ load_abrt_conf();
const char *default_dirs[] = {
- "/var/spool/abrt",
+ g_settings_dump_location,
NULL,
NULL,
};
@@ -777,5 +777,6 @@ int main(int argc, char **argv)
/* Enter main loop */
gtk_main();
+ free_abrt_conf_data();
return 0;
}
diff --git a/src/hooks/Makefile.am b/src/hooks/Makefile.am
index 95cd363..f202776 100644
--- a/src/hooks/Makefile.am
+++ b/src/hooks/Makefile.am
@@ -14,7 +14,6 @@ abrt_hook_ccpp_SOURCES = \
abrt_hook_ccpp_CPPFLAGS = \
-I$(srcdir)/../include \
-I$(srcdir)/../lib \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
diff --git a/src/hooks/abrt-hook-ccpp.c b/src/hooks/abrt-hook-ccpp.c
index da3b337..5d837c3 100644
--- a/src/hooks/abrt-hook-ccpp.c
+++ b/src/hooks/abrt-hook-ccpp.c
@@ -309,13 +309,11 @@ int main(int argc, char** argv)
{
struct stat sb;
- if (argc < 9) /* no argv[8]? */
+ if (argc < 8)
{
- /* percent specifier: %s %c %p %u %g %t %e %h */
- /* argv: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] */
- // [OLD_PATTERN] is deprecated, so removing it from help:
- //error_msg_and_die("Usage: %s DUMPDIR SIGNO CORE_SIZE_LIMIT PID UID GID TIME BINARY_NAME [HOSTNAME [OLD_PATTERN]]", argv[0]);
- error_msg_and_die("Usage: %s DUMPDIR SIGNO CORE_SIZE_LIMIT PID UID GID TIME BINARY_NAME [HOSTNAME]", argv[0]);
+ /* percent specifier: %s %c %p %u %g %t %e %h */
+ /* argv: [0] [1] [2] [3] [4] [5] [6] [7] [8]*/
+ error_msg_and_die("Usage: %s SIGNO CORE_SIZE_LIMIT PID UID GID TIME BINARY_NAME [HOSTNAME]", argv[0]);
}
/* Not needed on 2.6.30.
@@ -337,20 +335,23 @@ int main(int argc, char** argv)
logmode = LOGMODE_SYSLOG;
errno = 0;
- const char* dddir = argv[1];
- const char* signal_str = argv[2];
+ /* Parse abrt.conf */
+ load_abrt_conf();
+
+ const char* signal_str = argv[1];
int signal_no = xatoi_positive(signal_str);
- off_t ulimit_c = strtoull(argv[3], NULL, 10);
+ off_t ulimit_c = strtoull(argv[2], NULL, 10);
if (ulimit_c < 0) /* unlimited? */
{
/* set to max possible >0 value */
ulimit_c = ~((off_t)1 << (sizeof(off_t)*8-1));
}
- pid_t pid = xatoi_positive(argv[4]);
- uid_t uid = xatoi_positive(argv[5]);
+ pid_t pid = xatoi_positive(argv[3]);
+ uid_t uid = xatoi_positive(argv[4]);
if (errno || pid <= 0)
{
- perror_msg_and_die("pid '%s' or limit '%s' is bogus", argv[4], argv[3]);
+ free_abrt_conf_data();
+ perror_msg_and_die("pid '%s' or limit '%s' is bogus", argv[3], argv[2]);
}
FILE *saved_core_pattern = fopen(VAR_RUN"/abrt/saved_core_pattern", "r");
@@ -360,52 +361,27 @@ int main(int argc, char** argv)
fclose(saved_core_pattern);
/* If we have a saved pattern and it's not a "|PROG ARGS" thing... */
if (s && s[0] != '|')
- {
core_basename = s;
- argv[10] = NULL; /* don't use old way to pass OLD_PATTERN */
- }
}
struct utsname uts;
- if (!argv[9]) /* no HOSTNAME? */
+ if (!argv[8]) /* no HOSTNAME? */
{
uname(&uts);
- argv[9] = uts.nodename;
- }
- else /* argv[9]=HOSTNAME exists.*/
- if (argv[10]) /* OLD_PATTERN? (deprecated) */
- {
- char *buf = (char*) xzalloc(strlen(argv[10]) / 2 + 2);
- char *end = hex2bin(buf, argv[10], strlen(argv[10]));
- if (end && end > buf && end[-1] == '\0')
- {
- core_basename = buf;
- //log("core_basename:'%s'", core_basename);
- }
- else
- {
- /* Until recently, kernels were truncating expanded core pattern.
- * In this case, we end up here...
- */
- error_msg("bad old pattern '%s', ignoring and using 'core'", argv[10]);
- /* core_basename = "core"; - already is */
- free(buf);
- }
+ argv[8] = uts.nodename;
}
int src_fd_binary;
char *executable = get_executable(pid, &src_fd_binary);
if (executable && strstr(executable, "/abrt-hook-ccpp"))
{
+ free_abrt_conf_data();
error_msg_and_die("pid %lu is '%s', not dumping it to avoid recursion",
(long)pid, executable);
}
char *user_pwd = get_cwd(pid); /* may be NULL on error */
- /* Parse abrt.conf */
- load_abrt_conf();
- free_abrt_conf_data(); /* can do this because we need only g_settings_nMaxCrashReportsSize */
/* ... and plugins/CCpp.conf */
bool setting_MakeCompatCore;
bool setting_SaveBinaryImage;
@@ -430,7 +406,7 @@ int main(int argc, char** argv)
int user_core_fd = -1;
if (setting_MakeCompatCore && ulimit_c != 0)
/* note: checks "user_pwd == NULL" inside; updates core_basename */
- user_core_fd = open_user_core(user_pwd, uid, pid, &argv[2]);
+ user_core_fd = open_user_core(user_pwd, uid, pid, &argv[1]);
if (executable == NULL)
{
@@ -475,7 +451,7 @@ int main(int argc, char** argv)
*/
unsigned maxsize = g_settings_nMaxCrashReportsSize + g_settings_nMaxCrashReportsSize / 4;
maxsize |= 63;
- check_free_space(maxsize);
+ check_free_space(maxsize, g_settings_dump_location);
}
char path[PATH_MAX];
@@ -483,7 +459,7 @@ int main(int argc, char** argv)
/* Check /var/spool/abrt/last-ccpp marker, do not dump repeated crashes
* if they happen too often. Else, write new marker value.
*/
- snprintf(path, sizeof(path), "%s/last-ccpp", dddir);
+ snprintf(path, sizeof(path), "%s/last-ccpp", g_settings_dump_location);
int fd = open(path, O_RDWR | O_CREAT, 0600);
if (fd >= 0)
{
@@ -502,6 +478,7 @@ int main(int argc, char** argv)
error_msg("not dumping repeating crash in '%s'", executable);
if (setting_MakeCompatCore)
goto create_user_core;
+ free_abrt_conf_data();
return 1;
}
}
@@ -521,7 +498,7 @@ int main(int argc, char** argv)
* and maybe crash again...
* Unlike dirs, mere files are ignored by abrtd.
*/
- snprintf(path, sizeof(path), "%s/%s-coredump", dddir, last_slash);
+ snprintf(path, sizeof(path), "%s/%s-coredump", g_settings_dump_location, last_slash);
int abrt_core_fd = xopen3(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
off_t core_size = copyfd_eof(STDIN_FILENO, abrt_core_fd, COPYFD_SPARSE);
if (core_size < 0 || fsync(abrt_core_fd) != 0)
@@ -529,16 +506,21 @@ int main(int argc, char** argv)
unlink(path);
/* copyfd_eof logs the error including errno string,
* but it does not log file name */
+ free_abrt_conf_data();
error_msg_and_die("error saving coredump to %s", path);
}
log("saved core dump of pid %lu (%s) to %s (%llu bytes)", (long)pid, executable, path, (long long)core_size);
+ free_abrt_conf_data();
return 0;
}
unsigned path_len = snprintf(path, sizeof(path), "%s/ccpp-%s-%lu.new",
- dddir, iso_date_string(NULL), (long)pid);
+ g_settings_dump_location, iso_date_string(NULL), (long)pid);
if (path_len >= (sizeof(path) - sizeof("/"FILENAME_COREDUMP)))
+ {
+ free_abrt_conf_data();
return 1;
+ }
struct dump_dir *dd = dd_create(path, uid, 0640);
if (dd)
@@ -588,6 +570,7 @@ int main(int argc, char** argv)
if (sz < 0 || fsync(dst_fd_binary) != 0)
{
unlink(path);
+ free_abrt_conf_data();
error_msg_and_die("error saving binary image to %s", path);
}
close(dst_fd_binary);
@@ -606,7 +589,8 @@ int main(int argc, char** argv)
unlink(core_basename);
}
errno = sv_errno;
- perror_msg_and_die("can't open '%s'", path);
+ free_abrt_conf_data();
+ perror_msg_and_die("Can't open '%s'", path);
}
fchown(abrt_core_fd, dd->dd_uid, dd->dd_gid);
@@ -636,6 +620,7 @@ int main(int argc, char** argv)
}
/* copyfd_sparse logs the error including errno string,
* but it does not log file name */
+ free_abrt_conf_data();
error_msg_and_die("error writing %s", path);
}
log("saved core dump of pid %lu (%s) to %s (%llu bytes)", (long)pid, executable, path, (long long)core_size);
@@ -667,16 +652,20 @@ int main(int argc, char** argv)
*/
unsigned maxsize = g_settings_nMaxCrashReportsSize + g_settings_nMaxCrashReportsSize / 4;
maxsize |= 63;
- trim_debug_dumps(DEBUG_DUMPS_DIR, maxsize * (double)(1024*1024), path);
+ trim_debug_dumps(g_settings_dump_location, maxsize * (double)(1024*1024), path);
}
+ free_abrt_conf_data();
return 0;
}
/* We didn't create abrt dump, but may need to create compat coredump */
create_user_core:
if (user_core_fd < 0)
+ {
+ free_abrt_conf_data();
return 0;
+ }
off_t core_size = copyfd_size(STDIN_FILENO, user_core_fd, ulimit_c, COPYFD_SPARSE);
if (core_size < 0 || fsync(user_core_fd) != 0) {
@@ -684,15 +673,17 @@ int main(int argc, char** argv)
perror_msg("error writing %s/%s", user_pwd, core_basename);
xchdir(user_pwd);
unlink(core_basename);
+ free_abrt_conf_data();
return 1;
}
if (ulimit_c == 0 || core_size > ulimit_c)
{
xchdir(user_pwd);
unlink(core_basename);
+ free_abrt_conf_data();
return 1;
}
log("saved core dump of pid %lu to %s/%s (%llu bytes)", (long)pid, user_pwd, core_basename, (long long)core_size);
-
+ free_abrt_conf_data();
return 0;
}
diff --git a/src/hooks/abrt-install-ccpp-hook b/src/hooks/abrt-install-ccpp-hook
index 12a443f..2450eba 100755
--- a/src/hooks/abrt-install-ccpp-hook
+++ b/src/hooks/abrt-install-ccpp-hook
@@ -11,9 +11,9 @@ SAVED_PATTERN_DIR="/var/run/abrt"
SAVED_PATTERN_FILE="/var/run/abrt/saved_core_pattern"
HOOK_BIN="/usr/libexec/abrt-hook-ccpp"
# Must match percent_specifiers[] order in abrt-hook-ccpp.c:
-PATTERN="|$HOOK_BIN /var/spool/abrt %s %c %p %u %g %t %e"
+PATTERN="|$HOOK_BIN %s %c %p %u %g %t %e"
# Same, but with bogus "executable name" parameter
-PATTERN1="|$HOOK_BIN /var/spool/abrt %s %c %p %u %g %t e"
+PATTERN1="|$HOOK_BIN %s %c %p %u %g %t e"
# core_pipe_limit specifies how many dump_helpers can run at the same time
# 0 - means unlimited, but it's not guaranteed that /proc/<pid> of crashing
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 163e7c3..43364dc 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -20,7 +20,6 @@ libabrt_la_CPPFLAGS = \
-I$(srcdir)/../lib \
-DLOCALSTATEDIR='"$(localstatedir)"' \
-DVAR_RUN=\"$(VAR_RUN)\" \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
diff --git a/src/lib/abrt_conf.c b/src/lib/abrt_conf.c
index 2a1cf36..2e13f2d 100644
--- a/src/lib/abrt_conf.c
+++ b/src/lib/abrt_conf.c
@@ -26,6 +26,7 @@ char * g_settings_sWatchCrashdumpArchiveDir = NULL;
unsigned int g_settings_nMaxCrashReportsSize = 1000;
bool g_settings_bProcessUnpackaged = false;
+char * g_settings_dump_location = NULL;
void free_abrt_conf_data()
{
@@ -40,6 +41,9 @@ void free_abrt_conf_data()
free(g_settings_sWatchCrashdumpArchiveDir);
g_settings_sWatchCrashdumpArchiveDir = NULL;
+
+ free(g_settings_dump_location);
+ g_settings_dump_location = NULL;
}
static GList *parse_list(const char* list)
@@ -118,6 +122,14 @@ static void ParseCommon(map_string_h *settings, const char *conf_filename)
g_settings_bProcessUnpackaged = string_to_bool(value);
g_hash_table_remove(settings, "ProcessUnpackaged");
}
+ value = g_hash_table_lookup(settings, "DumpLocation");
+ if (value)
+ {
+ g_settings_dump_location = xstrdup(value);
+ g_hash_table_remove(settings, "DumpLocation");
+ }
+ else
+ g_settings_dump_location = xstrdup("/var/spool/abrt");
GHashTableIter iter;
char *name;
diff --git a/src/lib/abrt_conf.h b/src/lib/abrt_conf.h
index 2ca7542..f45972e 100644
--- a/src/lib/abrt_conf.h
+++ b/src/lib/abrt_conf.h
@@ -37,6 +37,8 @@ extern bool g_settings_bOpenGPGCheck;
extern bool g_settings_bProcessUnpackaged;
#define g_settings_sWatchCrashdumpArchiveDir abrt_g_settings_sWatchCrashdumpArchiveDir
extern char * g_settings_sWatchCrashdumpArchiveDir;
+#define g_settings_dump_location abrt_g_settings_dump_location
+extern char * g_settings_dump_location;
#define load_abrt_conf abrt_load_abrt_conf
int load_abrt_conf();
diff --git a/src/lib/hooklib.c b/src/lib/hooklib.c
index b5fcec2..5ebec97 100644
--- a/src/lib/hooklib.c
+++ b/src/lib/hooklib.c
@@ -19,12 +19,12 @@
#include "internal_libreport.h"
#include "hooklib.h"
-void check_free_space(unsigned setting_MaxCrashReportsSize)
+void check_free_space(unsigned setting_MaxCrashReportsSize, const char *dump_location)
{
struct statvfs vfs;
- if (statvfs(DEBUG_DUMPS_DIR, &vfs) != 0)
+ if (statvfs(dump_location, &vfs) != 0)
{
- perror_msg_and_die("statvfs('%s')", DEBUG_DUMPS_DIR);
+ perror_msg_and_die("statvfs('%s')", dump_location);
}
/* Check that at least MaxCrashReportsSize/4 MBs are free */
@@ -34,7 +34,8 @@ void check_free_space(unsigned setting_MaxCrashReportsSize)
unsigned long fs_free_mb_x4 = ((unsigned long long)vfs.f_bfree / (1024/4)) * vfs.f_bsize / 1024;
if (fs_free_mb_x4 < setting_MaxCrashReportsSize)
{
- error_msg_and_die("aborting dump: only %luMiB is available on %s", fs_free_mb_x4 / 4, DEBUG_DUMPS_DIR);
+ error_msg_and_die("aborting dump: only %luMiB is available on %s",
+ fs_free_mb_x4 / 4, dump_location);
}
}
diff --git a/src/lib/hooklib.h b/src/lib/hooklib.h
index 1add7d0..0cb3f60 100644
--- a/src/lib/hooklib.h
+++ b/src/lib/hooklib.h
@@ -23,7 +23,7 @@ extern "C" {
#endif
#define check_free_space abrt_check_free_space
-void check_free_space(unsigned setting_MaxCrashReportsSize);
+void check_free_space(unsigned setting_MaxCrashReportsSize, const char *dump_location);
#define trim_debug_dumps abrt_trim_debug_dumps
void trim_debug_dumps(const char *dirname, double cap_size, const char *exclude_path);
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
index 543b424..de75c70 100644
--- a/src/plugins/Makefile.am
+++ b/src/plugins/Makefile.am
@@ -119,7 +119,6 @@ abrt_dump_oops_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -140,7 +139,6 @@ abrt_action_analyze_c_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -160,7 +158,6 @@ abrt_action_analyze_python_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -181,7 +178,6 @@ abrt_action_analyze_oops_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -201,7 +197,6 @@ abrt_action_trim_files_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -222,7 +217,6 @@ abrt_action_generate_backtrace_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
@@ -242,7 +236,6 @@ abrt_action_analyze_backtrace_CPPFLAGS = \
-DVAR_RUN=\"$(VAR_RUN)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
-DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
-DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
--
1.7.6