diff options
-rw-r--r-- | src/daemon/abrt_event.conf | 1 | ||||
-rw-r--r-- | src/lib/crash_data.c | 22 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/daemon/abrt_event.conf b/src/daemon/abrt_event.conf index 23765718..45d8e9a4 100644 --- a/src/daemon/abrt_event.conf +++ b/src/daemon/abrt_event.conf @@ -44,6 +44,7 @@ include events.d/*.conf # abrt-action-analyze-c needs package name, save package data first EVENT=post-create abrt-action-save-package-data +EVENT=post-create getent passwd "`cat uid`" | cut -d: -f1 >username EVENT=post-create analyzer=Python abrt-action-analyze-python EVENT=post-create analyzer=Kerneloops abrt-action-analyze-oops # If you want all users (not just root) to be able to see oopses: diff --git a/src/lib/crash_data.c b/src/lib/crash_data.c index 8c948436..ce546a54 100644 --- a/src/lib/crash_data.c +++ b/src/lib/crash_data.c @@ -133,13 +133,16 @@ static char* is_text_file(const char *name, ssize_t *sz) lseek(fd, 0, SEEK_SET); char *buf = (char*)xmalloc(*sz); - ssize_t r = *sz = full_read(fd, buf, *sz); + ssize_t r = full_read(fd, buf, *sz); close(fd); if (r < 0) { free(buf); return NULL; /* it's not text (because we can't read it) */ } + if (r < *sz) + buf[r] = '\0'; + *sz = r; /* Some files in our dump directories are known to always be textual */ const char *base = strrchr(name, '/'); @@ -211,11 +214,20 @@ void load_crash_data_from_dump_dir(crash_data_t *crash_data, struct dump_dir *dd } char *content; - if (sz < 4*1024) /* is_text_file did read entire file */ - content = xstrndup(text, sz); //TODO: can avoid this copying if is_text_file() adds NUL - else /* no, need to read it all */ + if (sz < 4*1024) /* did is_text_file read entire file? */ + { + content = text; + /* Strip '\n' from one-line elements: */ + char *nl = strchr(content, '\n'); + if (nl && nl[1] == '\0') + *nl = '\0'; + } + else + { + /* no, need to read it all */ + free(text); content = dd_load_text(dd, short_name); - free(text); + } add_to_crash_data_ext(crash_data, short_name, |