Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/lib/abrt_curl.c | 19 +++++++++++++------
src/lib/abrt_curl.h | 13 ++++++++++---
src/plugins/abrt_rh_support.c | 12 ++++++++++--
3 files changed, 33 insertions(+), 11 deletions(-)
diff --git a/src/lib/abrt_curl.c b/src/lib/abrt_curl.c
index 0802a49..739da7d 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,14 +338,20 @@ 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");
+ }
+
+ if (data_size != ABRT_POST_DATA_FROMFILE_AS_FORM_DATA
+ || additional_headers)
+ {
+ xcurl_easy_setopt_ptr(handle, CURLOPT_HTTPHEADER, httpheader_list);
+ }
// Add User-Agent: ABRT/N.M
httpheader_list = curl_slist_append(httpheader_list, "User-Agent:
ABRT/"VERSION);
diff --git a/src/lib/abrt_curl.h b/src/lib/abrt_curl.h
index 77b4605..ad2afc1 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 b83f041..05b448b 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);
+
+ 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)
--
1.7.1