diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-07-23 12:53:08 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-07-23 12:53:08 +0100 |
commit | fe79d8c5a39f2b717f78cc3f3ef21b3cfc46500b (patch) | |
tree | c84e6a5d4c5cd78a7a2cc3c7adbc7af5d0541682 /src/lmtp_proto.c | |
parent | e0483657ff6cf1adc828ccce457814d61fe90a0d (diff) | |
download | rspamd-fe79d8c5a39f2b717f78cc3f3ef21b3cfc46500b.tar.gz rspamd-fe79d8c5a39f2b717f78cc3f3ef21b3cfc46500b.zip |
Revert "Unify code style."
This reverts commit e0483657ff6cf1adc828ccce457814d61fe90a0d.
Diffstat (limited to 'src/lmtp_proto.c')
-rw-r--r-- | src/lmtp_proto.c | 247 |
1 files changed, 90 insertions, 157 deletions
diff --git a/src/lmtp_proto.c b/src/lmtp_proto.c index ff00a5d3a..81cd13607 100644 --- a/src/lmtp_proto.c +++ b/src/lmtp_proto.c @@ -22,64 +22,62 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "cfg_file.h" #include "config.h" -#include "lmtp.h" -#include "lmtp_proto.h" #include "main.h" +#include "cfg_file.h" #include "util.h" +#include "lmtp.h" +#include "lmtp_proto.h" /* Max line size as it is defined in rfc2822 */ #define OUTBUFSIZ 1000 /* LMTP commands */ -static f_str_t lhlo_command = { +static f_str_t lhlo_command = { .begin = "LHLO", .len = sizeof ("LHLO") - 1 }; -static f_str_t mail_command = { +static f_str_t mail_command = { .begin = "MAIL FROM:", .len = sizeof ("MAIL FROM:") - 1 }; -static f_str_t rcpt_command = { +static f_str_t rcpt_command = { .begin = "RCPT TO:", .len = sizeof ("RCPT TO:") - 1 }; -static f_str_t data_command = { +static f_str_t data_command = { .begin = "DATA", .len = sizeof ("DATA") - 1 }; -static f_str_t data_dot = { +static f_str_t data_dot = { .begin = ".\r\n", .len = sizeof (".\r\n") - 1 }; -static const gchar *mail_regexp = - "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"; -static GRegex *mail_re = NULL; +static const gchar *mail_regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"; +static GRegex *mail_re = NULL; /* - * Extract e-mail from read line + * Extract e-mail from read line * return <> if no valid address detected */ -static gchar * +static gchar * extract_mail (rspamd_mempool_t * pool, f_str_t * line) { - GError *err = NULL; - gchar *match; - GMatchInfo *info; + GError *err = NULL; + gchar *match; + GMatchInfo *info; if (mail_re == NULL) { /* Compile regexp */ mail_re = g_regex_new (mail_regexp, G_REGEX_RAW, 0, &err); } - if (g_regex_match_full (mail_re, line->begin, line->len, 0, 0, &info, - NULL) == TRUE) { + if (g_regex_match_full (mail_re, line->begin, line->len, 0, 0, &info, NULL) == TRUE) { match = rspamd_mempool_strdup (pool, g_match_info_fetch (info, 0)); g_match_info_free (info); } @@ -93,18 +91,16 @@ extract_mail (rspamd_mempool_t * pool, f_str_t * line) static gboolean out_lmtp_reply (struct rspamd_task *task, gint code, gchar *rcode, gchar *msg) { - gchar outbuf[OUTBUFSIZ]; - gint r; + gchar outbuf[OUTBUFSIZ]; + gint r; if (*rcode == '\0') { r = rspamd_snprintf (outbuf, OUTBUFSIZ, "%d %s\r\n", code, msg); } else { - r = - rspamd_snprintf (outbuf, OUTBUFSIZ, "%d %s %s\r\n", code, rcode, - msg); + r = rspamd_snprintf (outbuf, OUTBUFSIZ, "%d %s %s\r\n", code, rcode, msg); } - if (!rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE)) { + if (! rspamd_dispatcher_write (task->dispatcher, outbuf, r, FALSE, FALSE)) { return FALSE; } return TRUE; @@ -113,19 +109,16 @@ out_lmtp_reply (struct rspamd_task *task, gint code, gchar *rcode, gchar *msg) gint read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) { - gchar *c, *rcpt; - f_str_t fstr; - gint i = 0, l = 0, size; + gchar *c, *rcpt; + f_str_t fstr; + gint i = 0, l = 0, size; switch (lmtp->state) { case LMTP_READ_LHLO: /* Search LHLO line */ if ((i = fstrstri (line, &lhlo_command)) == -1) { msg_info ("LHLO expected but not found"); - (void)out_lmtp_reply (lmtp->task, - LMTP_BAD_CMD, - "5.0.0", - "Need LHLO here"); + (void)out_lmtp_reply (lmtp->task, LMTP_BAD_CMD, "5.0.0", "Need LHLO here"); return -1; } else { @@ -136,12 +129,11 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) i++; c++; } - lmtp->task->helo = rspamd_mempool_alloc (lmtp->task->task_pool, - line->len - i + 1); + lmtp->task->helo = rspamd_mempool_alloc (lmtp->task->task_pool, line->len - i + 1); /* Strlcpy makes string null terminated by design */ rspamd_strlcpy (lmtp->task->helo, c, line->len - i + 1); lmtp->state = LMTP_READ_FROM; - if (!out_lmtp_reply (lmtp->task, LMTP_OK, "", "Ok")) { + if (! out_lmtp_reply (lmtp->task, LMTP_OK, "", "Ok")) { return -1; } return 0; @@ -151,10 +143,7 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) /* Search MAIL FROM: line */ if ((i = fstrstri (line, &mail_command)) == -1) { msg_info ("MAIL expected but not found"); - (void)out_lmtp_reply (lmtp->task, - LMTP_BAD_CMD, - "5.0.0", - "Need MAIL here"); + (void)out_lmtp_reply (lmtp->task, LMTP_BAD_CMD, "5.0.0", "Need MAIL here"); return -1; } else { @@ -164,7 +153,7 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) fstr.len = line->len - i; lmtp->task->from = extract_mail (lmtp->task->task_pool, &fstr); lmtp->state = LMTP_READ_RCPT; - if (!out_lmtp_reply (lmtp->task, LMTP_OK, "2.1.0", "Sender ok")) { + if (! out_lmtp_reply (lmtp->task, LMTP_OK, "2.1.0", "Sender ok")) { return -1; } return 0; @@ -174,10 +163,7 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) /* Search RCPT_TO: line */ if ((i = fstrstri (line, &rcpt_command)) == -1) { msg_info ("RCPT expected but not found"); - (void)out_lmtp_reply (lmtp->task, - LMTP_NO_RCPT, - "5.5.4", - "Need RCPT here"); + (void)out_lmtp_reply (lmtp->task, LMTP_NO_RCPT, "5.5.4", "Need RCPT here"); return -1; } else { @@ -189,17 +175,13 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) if (*rcpt == '<' && *(rcpt + 1) == '>') { /* Invalid or empty rcpt not allowed */ msg_info ("bad recipient"); - (void)out_lmtp_reply (lmtp->task, - LMTP_NO_RCPT, - "5.5.4", - "Bad recipient"); + (void)out_lmtp_reply (lmtp->task, LMTP_NO_RCPT, "5.5.4", "Bad recipient"); return -1; } /* Strlcpy makes string null terminated by design */ lmtp->task->rcpt = g_list_prepend (lmtp->task->rcpt, rcpt); lmtp->state = LMTP_READ_DATA; - if (!out_lmtp_reply (lmtp->task, LMTP_OK, "2.1.0", - "Recipient ok")) { + if (! out_lmtp_reply (lmtp->task, LMTP_OK, "2.1.0", "Recipient ok")) { return -1; } return 0; @@ -209,10 +191,7 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) /* Search DATA line */ if ((i = fstrstri (line, &data_command)) == -1) { msg_info ("DATA expected but not found"); - (void)out_lmtp_reply (lmtp->task, - LMTP_BAD_CMD, - "5.0.0", - "Need DATA here"); + (void)out_lmtp_reply (lmtp->task, LMTP_BAD_CMD, "5.0.0", "Need DATA here"); return -1; } else { @@ -222,14 +201,12 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) while (g_ascii_isspace (*c++)) { i++; } - rcpt = rspamd_mempool_alloc (lmtp->task->task_pool, - line->len - i + 1); + rcpt = rspamd_mempool_alloc (lmtp->task->task_pool, line->len - i + 1); /* Strlcpy makes string null terminated by design */ rspamd_strlcpy (rcpt, c, line->len - i + 1); lmtp->task->rcpt = g_list_prepend (lmtp->task->rcpt, rcpt); lmtp->state = LMTP_READ_MESSAGE; - if (!out_lmtp_reply (lmtp->task, LMTP_DATA, "", - "Enter message, ending with \".\" on a line by itself")) { + if (! out_lmtp_reply (lmtp->task, LMTP_DATA, "", "Enter message, ending with \".\" on a line by itself")) { return -1; } lmtp->task->msg = fstralloc (lmtp->task->task_pool, BUFSIZ); @@ -254,19 +231,17 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) /* size *= 2 */ size <<= 1; } - lmtp->task->msg = fstrgrow (lmtp->task->task_pool, - lmtp->task->msg, - size); + lmtp->task->msg = fstrgrow (lmtp->task->task_pool, lmtp->task->msg, size); } fstrcat (lmtp->task->msg, line); return 0; } break; case LMTP_READ_DOT: - /* We have some input after reading dot, close connection as we have no currently support of multiply + /* We have some input after reading dot, close connection as we have no currently support of multiply * messages per session */ - if (!out_lmtp_reply (lmtp->task, LMTP_QUIT, "", "Bye")) { + if (! out_lmtp_reply (lmtp->task, LMTP_QUIT, "", "Bye")) { return -1; } return 0; @@ -277,8 +252,8 @@ read_lmtp_input_line (struct rspamd_lmtp_proto *lmtp, f_str_t * line) } struct mta_callback_data { - struct rspamd_task *task; - rspamd_io_dispatcher_t *dispatcher; + struct rspamd_task *task; + rspamd_io_dispatcher_t *dispatcher; enum { LMTP_WANT_GREETING, LMTP_WANT_MAIL, @@ -289,20 +264,18 @@ struct mta_callback_data { } state; }; -static gboolean +static gboolean parse_mta_str (f_str_t * in, struct mta_callback_data *cd) { - gint r; - static f_str_t okres1 = { + gint r; + static f_str_t okres1 = { .begin = "250 ", .len = sizeof ("250 ") - 1, } , okres2 = { - .begin = "220 ",.len = sizeof ("220 ") - 1, - } + .begin = "220 ",.len = sizeof ("220 ") - 1,} , datares = { - .begin = "354 ",.len = sizeof ("354 ") - 1, - }; + .begin = "354 ",.len = sizeof ("354 ") - 1,}; switch (cd->state) { case LMTP_WANT_GREETING: @@ -328,12 +301,12 @@ close_mta_connection (struct mta_callback_data *cd, gboolean is_success) { cd->task->state = CLOSING_CONNECTION; if (is_success) { - if (!out_lmtp_reply (cd->task, LMTP_OK, "", "Delivery completed")) { + if (! out_lmtp_reply (cd->task, LMTP_OK, "", "Delivery completed")) { return; } } else { - if (!out_lmtp_reply (cd->task, LMTP_FAILURE, "", "Delivery failure")) { + if (! out_lmtp_reply (cd->task, LMTP_FAILURE, "", "Delivery failure")) { return; } } @@ -343,20 +316,19 @@ close_mta_connection (struct mta_callback_data *cd, gboolean is_success) /* * Callback that is called when there is data to read in buffer */ -static gboolean +static gboolean mta_read_socket (f_str_t * in, void *arg) { - struct mta_callback_data *cd = (struct mta_callback_data *)arg; - gchar outbuf[1024], *hostbuf, *c; - gint hostmax, r; - GList *cur; - static f_str_t contres1 = { + struct mta_callback_data *cd = (struct mta_callback_data *)arg; + gchar outbuf[1024], *hostbuf, *c; + gint hostmax, r; + GList *cur; + static f_str_t contres1 = { .begin = "250-", .len = sizeof ("250-") - 1, } , contres2 = { - .begin = "220-",.len = sizeof ("220-") - 1, - }; + .begin = "220-",.len = sizeof ("220-") - 1,}; if (fstrstr (in, &contres1) != -1 || fstrstr (in, &contres2) != -1) { /* Skip such lines */ @@ -375,19 +347,12 @@ mta_read_socket (f_str_t * in, void *arg) gethostname (hostbuf, hostmax); hostbuf[hostmax - 1] = '\0'; if (cd->task->cfg->deliver_lmtp) { - r = rspamd_snprintf (outbuf, - sizeof (outbuf), - "LHLO %s" CRLF, - hostbuf); + r = rspamd_snprintf (outbuf, sizeof (outbuf), "LHLO %s" CRLF, hostbuf); } else { - r = rspamd_snprintf (outbuf, - sizeof (outbuf), - "HELO %s" CRLF, - hostbuf); + r = rspamd_snprintf (outbuf, sizeof (outbuf), "HELO %s" CRLF, hostbuf); } - if (!rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, - FALSE)) { + if (! rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, FALSE)) { return FALSE; } cd->state = LMTP_WANT_MAIL; @@ -398,12 +363,8 @@ mta_read_socket (f_str_t * in, void *arg) close_mta_connection (cd, FALSE); return FALSE; } - r = rspamd_snprintf (outbuf, - sizeof (outbuf), - "MAIL FROM: <%s>" CRLF, - cd->task->from); - if (!rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, - FALSE)) { + r = rspamd_snprintf (outbuf, sizeof (outbuf), "MAIL FROM: <%s>" CRLF, cd->task->from); + if (! rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, FALSE)) { return FALSE; } cd->state = LMTP_WANT_RCPT; @@ -417,15 +378,11 @@ mta_read_socket (f_str_t * in, void *arg) cur = g_list_first (cd->task->rcpt); r = 0; while (cur) { - r += rspamd_snprintf (outbuf + r, - sizeof (outbuf) - r, - "RCPT TO: <%s>" CRLF, - (gchar *)cur->data); + r += rspamd_snprintf (outbuf + r, sizeof (outbuf) - r, "RCPT TO: <%s>" CRLF, (gchar *)cur->data); cur = g_list_next (cur); } - if (!rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, - FALSE)) { + if (! rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, FALSE)) { return FALSE; } cd->state = LMTP_WANT_DATA; @@ -437,8 +394,7 @@ mta_read_socket (f_str_t * in, void *arg) return FALSE; } r = rspamd_snprintf (outbuf, sizeof (outbuf), "DATA" CRLF); - if (!rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, - FALSE)) { + if (! rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, FALSE)) { return FALSE; } cd->state = LMTP_WANT_DOT; @@ -451,14 +407,12 @@ mta_read_socket (f_str_t * in, void *arg) } c = g_mime_object_to_string ((GMimeObject *) cd->task->message); r = strlen (c); - if (!rspamd_dispatcher_write (cd->task->dispatcher, c, r, TRUE, TRUE)) { + if (! rspamd_dispatcher_write (cd->task->dispatcher, c, r, TRUE, TRUE)) { return FALSE; } - rspamd_mempool_add_destructor (cd->task->task_pool, - (rspamd_mempool_destruct_t) g_free, c); + rspamd_mempool_add_destructor (cd->task->task_pool, (rspamd_mempool_destruct_t) g_free, c); r = rspamd_snprintf (outbuf, sizeof (outbuf), CRLF "." CRLF); - if (!rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, - FALSE)) { + if (! rspamd_dispatcher_write (cd->task->dispatcher, outbuf, r, FALSE, FALSE)) { return FALSE; } cd->state = LMTP_WANT_CLOSING; @@ -482,7 +436,7 @@ mta_read_socket (f_str_t * in, void *arg) static void mta_err_socket (GError * err, void *arg) { - struct mta_callback_data *cd = (struct mta_callback_data *)arg; + struct mta_callback_data *cd = (struct mta_callback_data *)arg; msg_info ("abnormaly terminating connection with MTA"); close_mta_connection (cd, FALSE); } @@ -493,54 +447,36 @@ mta_err_socket (GError * err, void *arg) static gint lmtp_deliver_mta (struct rspamd_task *task) { - gint sock; - struct sockaddr_un *un; - struct mta_callback_data *cd; + gint sock; + struct sockaddr_un *un; + struct mta_callback_data *cd; if (task->cfg->deliver_family == AF_UNIX) { un = alloca (sizeof (struct sockaddr_un)); - sock = make_unix_socket (task->cfg->deliver_host, - un, - SOCK_STREAM, - FALSE, - TRUE); + sock = make_unix_socket (task->cfg->deliver_host, un, SOCK_STREAM, FALSE, TRUE); } else { - sock = make_universal_socket (task->cfg->deliver_host, - task->cfg->deliver_port, - SOCK_STREAM, - TRUE, - FALSE, - TRUE); + sock = make_universal_socket (task->cfg->deliver_host, task->cfg->deliver_port, + SOCK_STREAM, TRUE, FALSE, TRUE); } if (sock == -1) { - msg_warn ("cannot create socket for %s, %s", - task->cfg->deliver_host, - strerror (errno)); + msg_warn ("cannot create socket for %s, %s", task->cfg->deliver_host, strerror (errno)); } - cd = rspamd_mempool_alloc (task->task_pool, - sizeof (struct mta_callback_data)); + cd = rspamd_mempool_alloc (task->task_pool, sizeof (struct mta_callback_data)); cd->task = task; cd->state = LMTP_WANT_GREETING; - cd->dispatcher = rspamd_create_dispatcher (task->ev_base, - sock, - BUFFER_LINE, - mta_read_socket, - NULL, - mta_err_socket, - NULL, - (void *)cd); + cd->dispatcher = rspamd_create_dispatcher (task->ev_base, sock, BUFFER_LINE, mta_read_socket, NULL, mta_err_socket, NULL, (void *)cd); return 0; } -static gchar * +static gchar * format_lda_args (struct rspamd_task *task) { - gchar *res, *c, *r; - size_t len; - GList *rcpt; - gboolean got_args = FALSE; + gchar *res, *c, *r; + size_t len; + GList *rcpt; + gboolean got_args = FALSE; c = task->cfg->deliver_agent_path; /* Find first arg */ @@ -621,10 +557,10 @@ format_lda_args (struct rspamd_task *task) static gint lmtp_deliver_lda (struct rspamd_task *task) { - gchar *args, **argv; - GMimeStream *stream; - gint rc, ecode, p[2], argc; - pid_t cpid, pid; + gchar *args, **argv; + GMimeStream *stream; + gint rc, ecode, p[2], argc; + pid_t cpid, pid; if ((args = format_lda_args (task)) == NULL) { return -1; @@ -673,8 +609,7 @@ lmtp_deliver_lda (struct rspamd_task *task) close (p[0]); stream = g_mime_stream_fs_new (p[1]); - if (g_mime_object_write_to_stream ((GMimeObject *) task->message, - stream) == -1) { + if (g_mime_object_write_to_stream ((GMimeObject *) task->message, stream) == -1) { g_strfreev (argv); msg_info ("cannot write stream to lda"); return -1; @@ -732,13 +667,12 @@ lmtp_deliver_message (struct rspamd_task *task) gint write_lmtp_reply (struct rspamd_lmtp_proto *lmtp) { - gint r; - struct rspamd_task *task = lmtp->task; + gint r; + struct rspamd_task *task = lmtp->task; debug_task ("writing reply to client"); if (lmtp->task->error_code != 0) { - if (!out_lmtp_reply (lmtp->task, lmtp->task->error_code, "", - lmtp->task->last_error)) { + if (! out_lmtp_reply (lmtp->task, lmtp->task->error_code, "", lmtp->task->last_error)) { return -1; } } @@ -749,8 +683,7 @@ write_lmtp_reply (struct rspamd_lmtp_proto *lmtp) return -1; } else if (r == 0) { - if (!out_lmtp_reply (lmtp->task, LMTP_OK, "", - "Delivery completed")) { + if (! out_lmtp_reply (lmtp->task, LMTP_OK, "", "Delivery completed")) { return -1; } } @@ -762,6 +695,6 @@ write_lmtp_reply (struct rspamd_lmtp_proto *lmtp) return 0; } -/* - * vi:ts=4 +/* + * vi:ts=4 */ |