diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/abrt_curl.c | 16 | ||||
-rw-r--r-- | src/lib/abrt_curl.h | 13 |
2 files changed, 20 insertions, 9 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 |