summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/lib/abrt_curl.c16
-rw-r--r--src/lib/abrt_curl.h13
-rw-r--r--src/plugins/abrt_rh_support.c12
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)