Blob Blame History Raw
From 4df6adff7f2393fc228b0437a1c8be172ff7370e Mon Sep 17 00:00:00 2001
From: Matej Habrnal <mhabrnal@redhat.com>
Date: Thu, 3 Mar 2016 10:39:46 +0100
Subject: [PATCH] rhtsupport: attach all dump dir's element to a new case

Before this commit there were attached only binary files and an xml file which
contains all text dump dir's files at once.
With this commit reporter-rhtsupport attaching all dump dir's files separately.

Because we don't know if someone uses the xml file, the reporter attaches the
xml files as well.

Related to: rhbz#1261358

Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
---
 src/plugins/reporter-rhtsupport.c | 35 +++++++++++++++++++++++++++--------
 1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/src/plugins/reporter-rhtsupport.c b/src/plugins/reporter-rhtsupport.c
index 781b5b1..63a24a5 100644
--- a/src/plugins/reporter-rhtsupport.c
+++ b/src/plugins/reporter-rhtsupport.c
@@ -73,7 +73,8 @@ static report_result_t *get_reported_to(const char *dump_dir_name)
 }
 
 static
-int create_tarball(const char *tempfile, problem_data_t *problem_data)
+int create_tarball(const char *tempfile, struct dump_dir *dd,
+     problem_data_t *problem_data)
 {
     reportfile_t *file = NULL;
     int retval = 0; /* everything is ok so far .. */
@@ -126,15 +127,28 @@ int create_tarball(const char *tempfile, problem_data_t *problem_data)
                         /*recorded_filename*/ xml_name,
                         /*binary           */ !(value->flags & CD_FLAG_BIGTXT)
                 );
-                if (tar_append_file(tar, (char*)content, xml_name) != 0)
-                {
-                    free(xml_name);
-                    goto ret_fail;
-                }
                 free(xml_name);
             }
         }
     }
+
+    /* append all files from dump dir */
+    dd_init_next_file(dd);
+    char *short_name, *full_name;
+    while (dd_get_next_file(dd, &short_name, &full_name))
+    {
+        char *uploaded_name = concat_path_file("content", short_name);
+        free(short_name);
+
+        if (tar_append_file(tar, full_name, uploaded_name) != 0)
+        {
+            free(full_name);
+            goto ret_fail;
+        }
+
+        free(full_name);
+    }
+
     const char *signature = reportfile_as_string(file);
     /*
      * Note: this pointer points to string which is owned by
@@ -200,6 +214,7 @@ ret_fail:
     }
 
 ret_clean:
+    dd_close(dd);
     /* now it's safe to free file */
     free_reportfile(file);
     return retval;
@@ -777,7 +792,11 @@ int main(int argc, char **argv)
     /* Gzipping e.g. 0.5gig coredump takes a while. Let user know what we are doing */
     log(_("Compressing data"));
 
-    if (create_tarball(tempfile, problem_data) != 0)
+    struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
+    if (!dd)
+        xfunc_die(); /* error msg is already logged by dd_opendir */
+
+    if (create_tarball(tempfile, dd, problem_data) != 0)
     {
         errmsg = _("Can't create temporary file in "LARGE_DATA_TMP_DIR);
         goto ret;
@@ -850,7 +869,7 @@ int main(int argc, char **argv)
         }
         /* No error in case creation */
         /* Record "reported_to" element */
-        struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
+        dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
         if (dd)
         {
             struct report_result rr = { .label = (char *)"RHTSupport" };
-- 
1.8.3.1