commit a2af525: [Fix] Check results of write message as SSL can bork them

Vsevolod Stakhov vsevolod at highsecure.ru
Tue Nov 5 12:14:06 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-11-05 12:08:17 +0000
URL: https://github.com/rspamd/rspamd/commit/a2af525bbd71f141eafadb78fa8ac8e76788bee6 (HEAD -> master)

[Fix] Check results of write message as SSL can bork them

---
 src/client/rspamdclient.c     | 11 ++++++-----
 src/libutil/http_connection.c | 22 ++++++++++++----------
 src/libutil/http_connection.h |  4 ++--
 src/lua/lua_http.c            |  4 +---
 4 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/src/client/rspamdclient.c b/src/client/rspamdclient.c
index b8e89fcd7..e80926087 100644
--- a/src/client/rspamdclient.c
+++ b/src/client/rspamdclient.c
@@ -324,6 +324,7 @@ rspamd_client_command (struct rspamd_client_connection *conn,
 	gsize dict_len = 0;
 	void *dict = NULL;
 	ZSTD_CCtx *zctx;
+	gboolean ret;
 
 	req = g_malloc0 (sizeof (struct rspamd_client_request));
 	req->conn = conn;
@@ -457,16 +458,16 @@ rspamd_client_command (struct rspamd_client_connection *conn,
 	conn->start_time = rspamd_get_ticks (FALSE);
 
 	if (compressed) {
-		rspamd_http_connection_write_message (conn->http_conn, req->msg, NULL,
-				"application/x-compressed", req,
+		ret = rspamd_http_connection_write_message (conn->http_conn, req->msg,
+				NULL,"application/x-compressed", req,
 				conn->timeout);
 	}
 	else {
-		rspamd_http_connection_write_message (conn->http_conn, req->msg, NULL,
-				"text/plain", req, conn->timeout);
+		ret = rspamd_http_connection_write_message (conn->http_conn, req->msg,
+				NULL,"text/plain", req, conn->timeout);
 	}
 
-	return TRUE;
+	return ret;
 }
 
 void
diff --git a/src/libutil/http_connection.c b/src/libutil/http_connection.c
index f7da1ee83..ca87c205a 100644
--- a/src/libutil/http_connection.c
+++ b/src/libutil/http_connection.c
@@ -1195,7 +1195,7 @@ rspamd_http_connection_new_client (struct rspamd_http_context *ctx,
 
 			if (fd == -1) {
 				msg_info ("cannot connect to http proxy %s: %s",
-						rspamd_inet_address_to_string (proxy_addr),
+						rspamd_inet_address_to_string_pretty (proxy_addr),
 						strerror (errno));
 				rspamd_upstream_fail (up, TRUE);
 
@@ -1214,8 +1214,8 @@ rspamd_http_connection_new_client (struct rspamd_http_context *ctx,
 	fd = rspamd_inet_address_connect (addr, SOCK_STREAM, TRUE);
 
 	if (fd == -1) {
-		msg_info ("cannot connect to proxy %s: %s",
-				rspamd_inet_address_to_string (addr),
+		msg_info ("cannot connect make http connection to %s: %s",
+				rspamd_inet_address_to_string_pretty (addr),
 				strerror (errno));
 
 		return NULL;
@@ -1905,7 +1905,7 @@ rspamd_http_message_write_header (const gchar* mime_type, gboolean encrypted,
 	return meth_len;
 }
 
-static void
+static gboolean
 rspamd_http_connection_write_message_common (struct rspamd_http_connection *conn,
 											 struct rspamd_http_message *msg,
 											 const gchar *host,
@@ -2236,7 +2236,7 @@ rspamd_http_connection_write_message_common (struct rspamd_http_connection *conn
 			conn->error_handler (conn, err);
 			rspamd_http_connection_unref (conn);
 			g_error_free (err);
-			return;
+			return FALSE;
 		}
 		else {
 			if (priv->ssl) {
@@ -2261,7 +2261,7 @@ rspamd_http_connection_write_message_common (struct rspamd_http_connection *conn
 				conn->error_handler (conn, err);
 				rspamd_http_connection_unref (conn);
 				g_error_free (err);
-				return;
+				return FALSE;
 			}
 		}
 	}
@@ -2270,9 +2270,11 @@ rspamd_http_connection_write_message_common (struct rspamd_http_connection *conn
 				rspamd_http_event_handler, conn);
 		rspamd_ev_watcher_start (priv->ctx->event_loop, &priv->ev, priv->timeout);
 	}
+
+	return TRUE;
 }
 
-void
+gboolean
 rspamd_http_connection_write_message (struct rspamd_http_connection *conn,
 									  struct rspamd_http_message *msg,
 									  const gchar *host,
@@ -2280,11 +2282,11 @@ rspamd_http_connection_write_message (struct rspamd_http_connection *conn,
 									  gpointer ud,
 									  ev_tstamp timeout)
 {
-	rspamd_http_connection_write_message_common (conn, msg, host, mime_type,
+	return rspamd_http_connection_write_message_common (conn, msg, host, mime_type,
 			ud, timeout, FALSE);
 }
 
-void
+gboolean
 rspamd_http_connection_write_message_shared (struct rspamd_http_connection *conn,
 											 struct rspamd_http_message *msg,
 											 const gchar *host,
@@ -2292,7 +2294,7 @@ rspamd_http_connection_write_message_shared (struct rspamd_http_connection *conn
 											 gpointer ud,
 											 ev_tstamp timeout)
 {
-	rspamd_http_connection_write_message_common (conn, msg, host, mime_type,
+	return rspamd_http_connection_write_message_common (conn, msg, host, mime_type,
 			ud, timeout, TRUE);
 }
 
diff --git a/src/libutil/http_connection.h b/src/libutil/http_connection.h
index b90d0125a..7c901fd2a 100644
--- a/src/libutil/http_connection.h
+++ b/src/libutil/http_connection.h
@@ -240,7 +240,7 @@ void rspamd_http_connection_read_message_shared (
  * @param ud opaque user data
  * @param fd fd to read/write
  */
-void rspamd_http_connection_write_message (
+gboolean rspamd_http_connection_write_message (
 		struct rspamd_http_connection *conn,
 		struct rspamd_http_message *msg,
 		const gchar *host,
@@ -248,7 +248,7 @@ void rspamd_http_connection_write_message (
 		gpointer ud,
 		ev_tstamp timeout);
 
-void rspamd_http_connection_write_message_shared (
+gboolean rspamd_http_connection_write_message_shared (
 		struct rspamd_http_connection *conn,
 		struct rspamd_http_message *msg,
 		const gchar *host,
diff --git a/src/lua/lua_http.c b/src/lua/lua_http.c
index 6f541b962..f7dd01e87 100644
--- a/src/lua/lua_http.c
+++ b/src/lua/lua_http.c
@@ -455,11 +455,9 @@ lua_http_make_connection (struct lua_http_cbdata *cbd)
 		/* Message is now owned by a connection object */
 		cbd->msg = NULL;
 
-		rspamd_http_connection_write_message (cbd->conn, msg,
+		return rspamd_http_connection_write_message (cbd->conn, msg,
 				cbd->host, cbd->mime_type, cbd,
 				cbd->timeout);
-
-		return TRUE;
 	}
 
 	return FALSE;


More information about the Commits mailing list