summaryrefslogtreecommitdiffstats
path: root/src/hooks
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2011-04-18 22:41:41 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2011-04-18 22:41:41 +0200
commit20825945e91651cccb080ee94286a33cd82d3ee4 (patch)
tree2f4a1cf6f49e98cb48701999e694c462871eeb37 /src/hooks
parentf5ba5aab2ad2cbf3b7f3b27e2a9aec3e086dc0f3 (diff)
downloadabrt-20825945e91651cccb080ee94286a33cd82d3ee4.tar.gz
abrt-20825945e91651cccb080ee94286a33cd82d3ee4.tar.xz
abrt-20825945e91651cccb080ee94286a33cd82d3ee4.zip
abrt-hook-ccpp: add saving of environ, disable saving of smaps. closes #91
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Diffstat (limited to 'src/hooks')
-rw-r--r--src/hooks/abrt-hook-ccpp.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/src/hooks/abrt-hook-ccpp.c b/src/hooks/abrt-hook-ccpp.c
index dfccee74..d13851f3 100644
--- a/src/hooks/abrt-hook-ccpp.c
+++ b/src/hooks/abrt-hook-ccpp.c
@@ -514,28 +514,39 @@ int main(int argc, char** argv)
dd_create_basic_files(dd, uid);
char source_filename[sizeof("/proc/%lu/smaps") + sizeof(long)*3];
- int base_name = sprintf(source_filename, "/proc/%lu/smaps", (long)pid);
- base_name -= strlen("smaps");
+ int source_base_ofs = sprintf(source_filename, "/proc/%lu/smaps", (long)pid);
+ source_base_ofs -= strlen("smaps");
char *dest_filename = concat_path_file(dd->dd_dirname, FILENAME_SMAPS);
+ char *dest_base = strrchr(dest_filename, '/') + 1;
+
+ // Disabled for now: /proc/PID/smaps tends to be BIG,
+ // and not much more informative than /proc/PID/maps:
+ //copy_file(source_filename, dest_filename, 0640);
+ //chown(dest_filename, dd->dd_uid, dd->dd_gid);
+
+ strcpy(source_filename + source_base_ofs, "maps");
+ strcpy(dest_base, FILENAME_MAPS);
copy_file(source_filename, dest_filename, 0640);
chown(dest_filename, dd->dd_uid, dd->dd_gid);
- strcpy(source_filename + base_name, "maps");
- strcpy(strrchr(dest_filename, '/') + 1, FILENAME_MAPS);
- copy_file(source_filename, dest_filename, 0640);
- chown(dest_filename, dd->dd_uid, dd->dd_gid);
- free(dest_filename);
- char *cmdline = get_cmdline(pid); /* never NULL */
- char *reason = xasprintf("Process %s was killed by signal %s (SIG%s)",
- executable, signal_str, signame ? signame : signal_str);
+ free(dest_filename);
dd_save_text(dd, FILENAME_ANALYZER, "CCpp");
dd_save_text(dd, FILENAME_EXECUTABLE, executable);
- dd_save_text(dd, FILENAME_CMDLINE, cmdline);
+
+ char *reason = xasprintf("Process %s was killed by signal %s (SIG%s)",
+ executable, signal_str, signame ? signame : signal_str);
dd_save_text(dd, FILENAME_REASON, reason);
- free(cmdline);
free(reason);
+ char *cmdline = get_cmdline(pid);
+ dd_save_text(dd, FILENAME_CMDLINE, cmdline ? : "");
+ free(cmdline);
+
+ char *environ = get_environ(pid);
+ dd_save_text(dd, FILENAME_ENVIRON, environ ? : "");
+ free(environ);
+
if (src_fd_binary > 0)
{
strcpy(path + path_len, "/"FILENAME_BINARY);