diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2011-04-18 22:41:41 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2011-04-18 22:41:41 +0200 |
commit | 20825945e91651cccb080ee94286a33cd82d3ee4 (patch) | |
tree | 2f4a1cf6f49e98cb48701999e694c462871eeb37 /src/hooks/abrt-hook-ccpp.c | |
parent | f5ba5aab2ad2cbf3b7f3b27e2a9aec3e086dc0f3 (diff) | |
download | abrt-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/abrt-hook-ccpp.c')
-rw-r--r-- | src/hooks/abrt-hook-ccpp.c | 35 |
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); |