diff options
-rw-r--r-- | src/lib/abrt_curl.c | 16 | ||||
-rw-r--r-- | src/lib/abrt_curl.h | 13 | ||||
-rw-r--r-- | src/plugins/abrt_rh_support.c | 12 |
3 files changed, 30 insertions, 11 deletions
diff --git a/src/lib/abrt_curl.c b/src/lib/abrt_curl.c index 0802a49b..a05ba54d 100644 --- a/src/lib/abrt_curl.c +++ b/src/lib/abrt_curl.c @@ -213,6 +213,7 @@ int abrt_post(abrt_post_state_t *state, const char *url, const char *content_type, + const char **additional_headers, const char *data, off_t data_size) { @@ -337,20 +338,23 @@ abrt_post(abrt_post_state_t *state, if (!httpheader_list) error_msg_and_die("out of memory"); free(content_type_header); - xcurl_easy_setopt_ptr(handle, CURLOPT_HTTPHEADER, httpheader_list); } - // Override "Accept: text/plain": helps convince server to send plain-text - // error messages in the body of HTTP error responses [not verified to work] - httpheader_list = curl_slist_append(httpheader_list, "Accept: text/plain"); - if (!httpheader_list) - error_msg_and_die("out of memory"); + for (; additional_headers && *additional_headers; additional_headers++) + { + httpheader_list = curl_slist_append(httpheader_list, *additional_headers); + if (!httpheader_list) + error_msg_and_die("out of memory"); + } // Add User-Agent: ABRT/N.M httpheader_list = curl_slist_append(httpheader_list, "User-Agent: ABRT/"VERSION); if (!httpheader_list) error_msg_and_die("out of memory"); + if (httpheader_list) + xcurl_easy_setopt_ptr(handle, CURLOPT_HTTPHEADER, httpheader_list); + // Disabled: was observed to also handle "305 Use proxy" redirect, // apparently with POST->GET remapping - which server didn't like at all. // Attempted to suppress remapping on 305 using CURLOPT_POSTREDIR of -1, diff --git a/src/lib/abrt_curl.h b/src/lib/abrt_curl.h index 77b4605c..ad2afc11 100644 --- a/src/lib/abrt_curl.h +++ b/src/lib/abrt_curl.h @@ -62,31 +62,38 @@ int abrt_post(abrt_post_state_t *state, const char *url, const char *content_type, + const char **additional_headers, const char *data, off_t data_size); static inline int abrt_post_string(abrt_post_state_t *state, const char *url, const char *content_type, + const char **additional_headers, const char *str) { - return abrt_post(state, url, content_type, str, ABRT_POST_DATA_STRING); + return abrt_post(state, url, content_type, additional_headers, + str, ABRT_POST_DATA_STRING); } static inline int abrt_post_file(abrt_post_state_t *state, const char *url, const char *content_type, + const char **additional_headers, const char *filename) { - return abrt_post(state, url, content_type, filename, ABRT_POST_DATA_FROMFILE); + return abrt_post(state, url, content_type, additional_headers, + filename, ABRT_POST_DATA_FROMFILE); } static inline int abrt_post_file_as_form(abrt_post_state_t *state, const char *url, const char *content_type, + const char **additional_headers, const char *filename) { - return abrt_post(state, url, content_type, filename, ABRT_POST_DATA_FROMFILE_AS_FORM_DATA); + return abrt_post(state, url, content_type, additional_headers, + filename, ABRT_POST_DATA_FROMFILE_AS_FORM_DATA); } #ifdef __cplusplus diff --git a/src/plugins/abrt_rh_support.c b/src/plugins/abrt_rh_support.c index b83f041e..3ffa54be 100644 --- a/src/plugins/abrt_rh_support.c +++ b/src/plugins/abrt_rh_support.c @@ -323,7 +323,13 @@ send_report_to_new_case(const char* baseURL, ); case_state->username = username; case_state->password = password; - abrt_post_string(case_state, case_url, "application/xml", case_data); + + static const char *headers[] = { + "Accept: text/plain", + NULL + }; + + abrt_post_string(case_state, case_url, "application/xml", headers, case_data); char *case_location = find_header_in_abrt_post_state(case_state, "Location:"); switch (case_state->http_resp_code) @@ -385,7 +391,9 @@ send_report_to_new_case(const char* baseURL, ); atch_state->username = username; atch_state->password = password; - abrt_post_file_as_form(atch_state, atch_url, "application/binary", report_file_name); + + abrt_post_file_as_form(atch_state, atch_url, "application/binary", headers, + report_file_name); char *atch_location = find_header_in_abrt_post_state(atch_state, "Location:"); switch (atch_state->http_resp_code) |