changeset 321:412385b57dc4

refactoring
author meillo@marmaro.de
date Thu, 28 Apr 2011 16:48:23 +0200
parents 4c705c34182f
children 01d2f7a17bf0
files src/deliver.c src/smtp_out.c src/smtp_out.h
diffstat 3 files changed, 34 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/src/deliver.c	Thu Apr 28 16:43:38 2011 +0200
+++ b/src/deliver.c	Thu Apr 28 16:48:23 2011 +0200
@@ -289,26 +289,28 @@
 			gchar *cmd = g_malloc(256);
 			GList *var_table = var_table_rcpt(var_table_msg(NULL, msg), rcpt);
 
-			DEBUG(1) debugf("attempting to deliver %s to %s@%s with pipe\n", msg->uid, rcpt->local_part, rcpt->domain);
+			DEBUG(1) debugf("attempting to deliver %s to %s@%s with pipe\n",
+			                msg->uid, rcpt->local_part, rcpt->domain);
 
 			if (!expand(var_table, route->pipe, cmd, 256)) {
-				logwrite(LOG_ALERT, "could not expand string %s\n", route->pipe);
-			} else {
+				logwrite(LOG_ALERT, "could not expand string `%s'\n", route->pipe);
+				destroy_table(var_table);
+				continue;
+			}
 
-				if (pipe_out(msg, msg->hdr_list, rcpt, cmd, (route->pipe_fromline ? MSGSTR_FROMLINE : 0)
-				    | (route->pipe_fromhack ? MSGSTR_FROMHACK : 0))) {
-					logwrite(LOG_NOTICE, "%s => %s@%s with pipe (cmd = '%s')\n",
-					         msg->uid, rcpt->local_part, rcpt->domain, cmd);
-					addr_mark_delivered(rcpt);
-					ok = TRUE;
+			if (pipe_out(msg, msg->hdr_list, rcpt, cmd, (route->pipe_fromline ? MSGSTR_FROMLINE : 0)
+			    | (route->pipe_fromhack ? MSGSTR_FROMHACK : 0))) {
+				logwrite(LOG_NOTICE, "%s => %s@%s with pipe (cmd = '%s')\n",
+					 msg->uid, rcpt->local_part, rcpt->domain, cmd);
+				addr_mark_delivered(rcpt);
+				ok = TRUE;
+			} else {
+				logwrite(LOG_ALERT, "pipe_out '%s' failed\n", route->pipe);
+
+				if (route->connect_error_fail) {
+					addr_mark_failed(rcpt);
 				} else {
-					logwrite(LOG_ALERT, "pipe_out '%s' failed\n", route->pipe);
-
-					if (route->connect_error_fail) {
-						addr_mark_failed(rcpt);
-					} else {
-						addr_mark_defered(rcpt);
-					}
+					addr_mark_defered(rcpt);
 				}
 			}
 
@@ -352,7 +354,7 @@
 	}
 
 	if (route->wrapper) {
-		psb = smtp_out_open_child(route->wrapper);
+		psb = smtp_out_open_child(route->wrapper, host);
 	} else {
 		psb = smtp_out_open(host, port, res_list);
 	}
@@ -388,17 +390,10 @@
 		return ok;
 	}
 
-
-	if (route->wrapper) {
-		/* it seems as if the remote_host is only set for logging
-		/* XXX: this could probably be moved into smtp_out_open_child() */
-		psb->remote_host = host;
-	}
-
 	set_heloname(psb, route->helo_name ? route->helo_name : conf.host_name, route->do_correct_helo);
 
 #ifdef ENABLE_AUTH
-	if ((route->auth_name) && (route->auth_login) && (route->auth_secret)) {
+	if (route->auth_name && route->auth_login && route->auth_secret) {
 		set_auth(psb, route->auth_name, route->auth_login, route->auth_secret);
 	}
 #endif
@@ -692,6 +687,8 @@
 	GList *rf_list = NULL;
 	gchar *connect_name = NULL;
 	gboolean ok = FALSE;
+	GList *route_node;
+	GList *route_list;
 
 	connect_name = online_query();
 	if (!connect_name) {
@@ -707,13 +704,13 @@
 		return FALSE;
 	}
 
-	GList *route_list = read_route_list(rf_list, FALSE);
+	route_list = read_route_list(rf_list, FALSE);
 	if (!route_list) {
 		logwrite(LOG_ALERT, "could not read route list '%s'\n", connect_name);
 		return FALSE;
 	}
 
-	GList *route_node;
+	/* TODO: Should we stop if the mail was delivered? Dig deeper! */
 	foreach(route_list, route_node) {
 		connect_route *route = (connect_route *) (route_node->data);
 		/* TODO: ok gets overwritten */
@@ -723,6 +720,12 @@
 	return ok;
 }
 
+/*
+   This function searches in the list of rcpt addresses
+   for local and 'local net' addresses. Remote addresses
+   which are reachable only when online are treated specially
+   in another function.
+*/
 gboolean
 deliver_msg_list(GList * msg_list, guint flags)
 {
@@ -854,11 +857,7 @@
 	return ok;
 }
 
-/* This function searches in the list of rcpt addresses
-   for local and 'local net' addresses. Remote addresses
-   which are reachable only when online are treated specially
-   in another function.
-
+/*
    deliver() is called when a message has just been received and should
    be delivered immediately.
 */
--- a/src/smtp_out.c	Thu Apr 28 16:43:38 2011 +0200
+++ b/src/smtp_out.c	Thu Apr 28 16:48:23 2011 +0200
@@ -513,15 +513,14 @@
 }
 
 smtp_base*
-smtp_out_open_child(gchar * cmd)
+smtp_out_open_child(gchar * cmd, char* host)
 {
 	smtp_base *psb;
 	gint sock;
 
 	DEBUG(5) debugf("smtp_out_open_child entered, cmd = %s\n", cmd);
-
+	psb->remote_host = host;
 	sock = child(cmd);
-
 	if (sock > 0) {
 		psb = create_smtpbase(sock);
 		psb->remote_host = NULL;
--- a/src/smtp_out.h	Thu Apr 28 16:43:38 2011 +0200
+++ b/src/smtp_out.h	Thu Apr 28 16:48:23 2011 +0200
@@ -74,7 +74,7 @@
 gboolean set_auth(smtp_base * psb, gchar * name, gchar * login, gchar * secret);
 void destroy_smtpbase(smtp_base * psb);
 smtp_base *smtp_out_open(gchar * host, gint port, GList * resolve_list);
-smtp_base *smtp_out_open_child(gchar * cmd);
+smtp_base *smtp_out_open_child(gchar * cmd, char* host);
 gboolean smtp_out_rset(smtp_base * psb);
 gboolean smtp_out_init(smtp_base * psb, gboolean instant_helo);
 gint smtp_out_msg(smtp_base * psb, message * msg, address * return_path, GList * rcpt_list, GList * hdr_list);