dovecot-1.3: fts-solr: Don't break with curl versions older than...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Apr 17 22:45:09 EEST 2009
details: http://hg.dovecot.org/dovecot-1.3/rev/35c69f57621e
changeset: 9136:35c69f57621e
user: Timo Sirainen <tss at iki.fi>
date: Fri Apr 17 15:40:31 2009 -0400
description:
fts-solr: Don't break with curl versions older than v7.17.
diffstat:
1 file changed, 12 insertions(+), 14 deletions(-)
src/plugins/fts-solr/solr-connection.c | 26 ++++++++++++--------------
diffs (85 lines):
diff -r 43ce0506a90b -r 35c69f57621e src/plugins/fts-solr/solr-connection.c
--- a/src/plugins/fts-solr/solr-connection.c Fri Apr 17 13:22:13 2009 -0400
+++ b/src/plugins/fts-solr/solr-connection.c Fri Apr 17 15:40:31 2009 -0400
@@ -48,6 +48,7 @@ struct solr_connection_post {
struct solr_connection *conn;
const unsigned char *data;
size_t size, pos;
+ char *url;
unsigned int failed:1;
};
@@ -60,7 +61,7 @@ struct solr_connection {
struct curl_slist *headers, *headers_post;
XML_Parser xml_parser;
- char *url;
+ char *url, *last_sent_url;
char *http_failure;
unsigned int debug:1;
@@ -189,6 +190,7 @@ void solr_connection_deinit(struct solr_
curl_slist_free_all(conn->headers_post);
curl_multi_cleanup(conn->curlm);
curl_easy_cleanup(conn->curl);
+ i_free(conn->last_sent_url);
i_free(conn->url);
i_free(conn);
}
@@ -370,7 +372,6 @@ int solr_connection_select(struct solr_c
ARRAY_TYPE(fts_score_map) *scores)
{
struct solr_lookup_xml_context solr_lookup_context;
- string_t *str;
CURLcode ret;
long httpret;
@@ -390,12 +391,11 @@ int solr_connection_select(struct solr_c
XML_SetCharacterDataHandler(conn->xml_parser, solr_lookup_xml_data);
XML_SetUserData(conn->xml_parser, &solr_lookup_context);
- str = t_str_new(256);
- str_append(str, conn->url);
- str_append(str, "select?");
- str_append(str, query);
-
- curl_easy_setopt(conn->curl, CURLOPT_URL, str_c(str));
+ /* curl v7.16 and older don't strdup() the URL */
+ i_free(conn->last_sent_url);
+ conn->last_sent_url = i_strconcat(conn->url, "select?", query, NULL);
+
+ curl_easy_setopt(conn->curl, CURLOPT_URL, conn->last_sent_url);
ret = curl_easy_perform(conn->curl);
if (ret != 0) {
i_error("fts_solr: HTTP GET failed: %s",
@@ -415,7 +415,6 @@ solr_connection_post_begin(struct solr_c
{
struct solr_connection_post *post;
CURLMcode merr;
- string_t *str;
post = i_new(struct solr_connection_post, 1);
post->conn = conn;
@@ -432,11 +431,9 @@ solr_connection_post_begin(struct solr_c
curl_multi_strerror(merr));
post->failed = TRUE;
} else {
- str = t_str_new(256);
- str_append(str, conn->url);
- str_append(str, "update");
-
- curl_easy_setopt(conn->curl, CURLOPT_URL, str_c(str));
+ /* curl v7.16 and older don't strdup() the URL */
+ post->url = i_strconcat(conn->url, "update", NULL);
+ curl_easy_setopt(conn->curl, CURLOPT_URL, post->url);
curl_easy_setopt(conn->curl, CURLOPT_HTTPHEADER,
conn->headers_post);
curl_easy_setopt(conn->curl, CURLOPT_POST, (long)1);
@@ -546,6 +543,7 @@ int solr_connection_post_end(struct solr
curl_easy_setopt(conn->curl, CURLOPT_HTTPHEADER, conn->headers);
(void)curl_multi_remove_handle(conn->curlm, conn->curl);
+ i_free(post->url);
i_free(post);
conn->posting = FALSE;
More information about the dovecot-cvs
mailing list