Blob Blame History Raw
From f34a1ba30b825332d7ae5dd115b75f5cd79e01a5 Mon Sep 17 00:00:00 2001
From: Jakub Filak <jfilak@redhat.com>
Date: Wed, 29 Aug 2012 09:57:16 +0200
Subject: [LIBREPORT PATCH] trac#680: only for Fedora package 17 repository
 patch (not to push to abrt git)

reporter-ureport doesn't fail on "Validation error" response becase we
want to allow users to report problems created by older version of
abrt/libreport

Signed-off-by: Jakub Filak <jfilak@redhat.com>
---
 src/plugins/ureport.c | 43 ++++++++++++++++++++++++++++++++++---------
 1 file changed, 34 insertions(+), 9 deletions(-)

diff --git a/src/plugins/ureport.c b/src/plugins/ureport.c
index 96c7878..6569061 100644
--- a/src/plugins/ureport.c
+++ b/src/plugins/ureport.c
@@ -51,6 +51,7 @@ enum response_type
     UREPORT_SERVER_RESP_UNKNOWN_TYPE,
     UREPORT_SERVER_RESP_KNOWN,
     UREPORT_SERVER_RESP_ERROR,
+    UREPORT_SERVER_RESP_REJECTED,
 };
 
 struct ureport_server_response {
@@ -74,6 +75,13 @@ static bool ureport_server_parse_json(json_object *json, struct ureport_server_r
     {
         out_response->type = UREPORT_SERVER_RESP_ERROR;
         out_response->value = json_object_to_json_string(obj);
+
+        /* try to detect validation errors */
+        /* these errors are probably caused by reporting a bug created by older libreport version */
+        /* we wan't to allow users report old problems thus we must exit with SUCCESS code */
+        if (prefixcmp(out_response->value, "Validation failed:"))
+            out_response->type = UREPORT_SERVER_RESP_REJECTED;
+
         return true;
     }
 
@@ -99,17 +107,21 @@ static bool ureport_server_parse_json(json_object *json, struct ureport_server_r
     return false;
 }
 
-static bool check_response_statuscode(post_state_t *post_state, 
+static bool check_response_statuscode(post_state_t *post_state,
                                       const char *url)
 {
     if (post_state->http_resp_code != 202)
     {
         char *errmsg = post_state->curl_error_msg;
         if (errmsg && *errmsg)
-            error_msg("%s '%s'", errmsg, url);
+        {
+            VERB1 error_msg("%s '%s'", errmsg, url);
+        }
         else
-            error_msg("Unexpected HTTP status code: %d",
-                      post_state->http_resp_code);
+        {
+            VERB1 error_msg("Unexpected HTTP status code: %d",
+                            post_state->http_resp_code);
+        }
 
         return false;
     }
@@ -189,7 +201,12 @@ int main(int argc, char **argv)
         dd_close(dd);
 
         if (!ureport_result || !ureport_result->bthash)
-            error_msg_and_die(_("This problem does not have an uReport assigned."));
+        {
+            /* these errors are probably caused by reporting a bug */
+            /* created by older libreport version */
+            VERB1 error_msg(_("This problem does not have an uReport assigned."));
+            return 0;
+        }
 
         if (!bz_result || !bz_result->url)
             error_msg_and_die(_("This problem has not been reported to Bugzilla."));
@@ -234,10 +251,6 @@ int main(int argc, char **argv)
 
     int ret = 1; /* return 1 by default */
 
-    if (!check_response_statuscode(post_state, dest_url))
-        /* check_response_statuscode() already logged an error message */
-        goto err;
-
     json_object *const json = json_tokener_parse(post_state->body);
 
     if (is_error(json))
@@ -264,6 +277,12 @@ int main(int argc, char **argv)
     switch (response.type)
     {
         case UREPORT_SERVER_RESP_KNOWN:
+            if (!check_response_statuscode(post_state, dest_url))
+            {
+                error_msg("uReport server response type mismatch");
+                goto format_err;
+            }
+
             VERB1 log("is known: %s", response.value);
             ret = 0;
 
@@ -288,6 +307,12 @@ int main(int argc, char **argv)
                 log("THANKYOU");
             }
             break;
+        case UREPORT_SERVER_RESP_REJECTED:
+            /* it is silent because we don't want to scary users */
+            /* with a weired message about missing data */
+            VERB1 log("server rejected uReport: %s", response.value);
+            ret = 0;
+            break;
         case UREPORT_SERVER_RESP_ERROR:
             VERB1 log("server side error: %s", response.value);
             ret = 1; /* just to be sure */
-- 
1.7.11.4