diff options
author | gilles <gilles@poolp.org> | 2016-06-24 08:50:58 +0200 |
---|---|---|
committer | gilles <gilles@poolp.org> | 2016-06-24 08:50:58 +0200 |
commit | ec33d850725b0edc43250e22cef858449011f632 (patch) | |
tree | 0252ccfd09e937fec4655c6a8021d49e3913f5cc | |
parent | add missing files (diff) | |
download | OpenSMTPD-extras-ec33d850725b0edc43250e22cef858449011f632.tar.xz OpenSMTPD-extras-ec33d850725b0edc43250e22cef858449011f632.zip |
fix headers inclusion + disable rspamd for now
-rw-r--r-- | api/dict.c | 3 | ||||
-rw-r--r-- | api/filter_api.c | 6 | ||||
-rw-r--r-- | api/mproc.c | 5 | ||||
-rw-r--r-- | api/smtpd-api.h | 4 | ||||
-rw-r--r-- | api/tree.c | 3 | ||||
-rw-r--r-- | configure.ac | 24 | ||||
-rw-r--r-- | extras/filters/filter-rspamd/filter_rspamd.c | 41 | ||||
-rw-r--r-- | extras/filters/filter-rspamd/rspamd.c | 42 | ||||
-rw-r--r-- | extras/filters/filter-rspamd/rspamd.h | 1 |
9 files changed, 66 insertions, 63 deletions
@@ -25,8 +25,7 @@ #include <stdlib.h> #include <string.h> -#include "smtpd-defines.h" -#include "smtpd-api.h" +#include <smtpd-api.h> struct dictentry { SPLAY_ENTRY(dictentry) entry; diff --git a/api/filter_api.c b/api/filter_api.c index 5731083..547010f 100644 --- a/api/filter_api.c +++ b/api/filter_api.c @@ -35,11 +35,7 @@ #include <unistd.h> #include <grp.h> -#include "smtpd-defines.h" -#include "smtpd-api.h" -#include "ioev.h" -#include "iobuf.h" -#include "log.h" +#include <smtpd-api.h> #define FILTER_HIWAT 65536 diff --git a/api/mproc.c b/api/mproc.c index cb65b6d..b41271f 100644 --- a/api/mproc.c +++ b/api/mproc.c @@ -39,9 +39,8 @@ #include <string.h> #include <unistd.h> -#include "smtpd-defines.h" -#include "smtpd-api.h" -#include "log.h" +#include <smtpd-api.h> + /* from filter_api.c */ const char *proc_name(enum smtp_proc_type); diff --git a/api/smtpd-api.h b/api/smtpd-api.h index cedec69..9b346dd 100644 --- a/api/smtpd-api.h +++ b/api/smtpd-api.h @@ -30,6 +30,10 @@ #include <event.h> #include <imsg.h> +#include "smtpd-defines.h" +#include "ioev.h" +#include "iobuf.h" +#include "log.h" #include "rfc2822.h" #define FILTER_API_VERSION 50 @@ -30,8 +30,7 @@ #include <inttypes.h> #include <stdlib.h> -#include "smtpd-defines.h" -#include "smtpd-api.h" +#include <smtpd-api.h> struct treeentry { SPLAY_ENTRY(treeentry) entry; diff --git a/configure.ac b/configure.ac index 6afd042..c19a3d0 100644 --- a/configure.ac +++ b/configure.ac @@ -1129,18 +1129,18 @@ AC_ARG_WITH([experimental-filter-regex], ) AM_CONDITIONAL([HAVE_FILTER_REGEX], [test $HAVE_FILTER_REGEX = yes]) -HAVE_FILTER_RSPAMD=no -AC_ARG_WITH([experimental-filter-rspamd], - [ --with-experimental-filter-rspamd Enable filter rspamd], - [ - if test "x$withval" != "xno" ; then - AC_DEFINE([HAVE_FILTER_RSPAMD], [1], - [Define if you have filter rspamd]) - HAVE_FILTER_RSPAMD=yes - experimental_filter=yes - fi - ] -) +#HAVE_FILTER_RSPAMD=no +#AC_ARG_WITH([experimental-filter-rspamd], +# [ --with-experimental-filter-rspamd Enable filter rspamd], +# [ +# if test "x$withval" != "xno" ; then +# AC_DEFINE([HAVE_FILTER_RSPAMD], [1], +# [Define if you have filter rspamd]) +# HAVE_FILTER_RSPAMD=yes +# experimental_filter=yes +# fi +# ] +#) AM_CONDITIONAL([HAVE_FILTER_RSPAMD], [test $HAVE_FILTER_RSPAMD = yes]) HAVE_FILTER_SPAMASSASSIN=no diff --git a/extras/filters/filter-rspamd/filter_rspamd.c b/extras/filters/filter-rspamd/filter_rspamd.c index 13783ee..630fa60 100644 --- a/extras/filters/filter-rspamd/filter_rspamd.c +++ b/extras/filters/filter-rspamd/filter_rspamd.c @@ -29,37 +29,9 @@ #include <stdlib.h> #include <unistd.h> -#include "smtpd-defines.h" -#include "smtpd-api.h" -#include "log.h" -#include "iobuf.h" -#include "ioev.h" -#include "rspamd.h" +#include <smtpd-api.h> -static void -datahold_stream(uint64_t id, FILE *fp, void *arg) -{ - struct session *rs = arg; - size_t sz; - ssize_t len; - int ret; - - errno = 0; - if ((len = getline(&rs->tx.line, &sz, fp)) == -1) { - if (errno) { - filter_api_reject_code(rs->id, FILTER_FAIL, 421, - "temporary failure"); - return; - } - filter_api_accept(rs->id); - return; - } - - rs->tx.line[strcspn(rs->tx.line, "\n")] = '\0'; - ret = rfc2822_parser_feed(&rs->tx.rfc2822_parser, - rs->tx.line); - datahold_stream(id, fp, arg); -} +#include "rspamd.h" static int on_connect(uint64_t id, struct filter_connect *conn) @@ -74,6 +46,7 @@ on_connect(uint64_t id, struct filter_connect *conn) rs->ip = xstrdup(ip, "on_connect"); rs->hostname = xstrdup(conn->hostname, "on_connect"); filter_api_set_udata(id, rs); + return filter_api_accept(id); } @@ -83,6 +56,7 @@ on_helo(uint64_t id, const char *helo) struct session *rs = filter_api_get_udata(id); rs->helo = xstrdup(helo, "on_helo"); + return filter_api_accept(id); } @@ -94,6 +68,7 @@ on_mail(uint64_t id, struct mailaddr *mail) address = filter_api_mailaddr_to_text(mail); rs->tx.from = xstrdup(address, "on_mail"); + return filter_api_accept(id); } @@ -105,6 +80,7 @@ on_rcpt(uint64_t id, struct mailaddr *rcpt) address = filter_api_mailaddr_to_text(rcpt); rs->tx.rcpt = xstrdup(address, "on_rcpt"); + return filter_api_accept(id); } @@ -113,8 +89,7 @@ on_data(uint64_t id) { struct session *rs = filter_api_get_udata(id); - rs->tx.fp = filter_api_datahold_open(id, datahold_stream, rs); - if (rs->tx.fp == NULL) + if (! rspamd_buffer(rs)) return filter_api_reject_code(rs->id, FILTER_FAIL, 421, "temporary failure"); @@ -134,6 +109,7 @@ on_dataline(uint64_t id, const char *line) sz = fprintf(rs->tx.fp, "%s\n", line); if (sz == -1 || sz < (ssize_t)strlen(line) + 1) rs->tx.error = 1; + rspamd_send_chunk(rs, line); } @@ -146,7 +122,6 @@ on_eom(uint64_t id, size_t size) return 1; } - static void on_commit(uint64_t id) { diff --git a/extras/filters/filter-rspamd/rspamd.c b/extras/filters/filter-rspamd/rspamd.c index 8f5c039..5ff5b5e 100644 --- a/extras/filters/filter-rspamd/rspamd.c +++ b/extras/filters/filter-rspamd/rspamd.c @@ -29,18 +29,15 @@ #include <stdlib.h> #include <unistd.h> -#include "smtpd-defines.h" -#include "smtpd-api.h" -#include "log.h" -#include "iobuf.h" -#include "ioev.h" +#include <smtpd-api.h> -#include "rfc2822.h" #include "rspamd.h" #include "json.h" struct sockaddr_storage ss; +static void datahold_stream(uint64_t, FILE *, void *); + /* XXX * this needs to be handled differently, but lets focus on the filter for now */ @@ -140,6 +137,15 @@ session_free(struct session *rs) } int +rspamd_buffer(struct session *rs) +{ + rs->tx.fp = filter_api_datahold_open(rs->id, datahold_stream, rs); + if (rs->tx.fp == NULL) + return 0; + return 1; +} + +int rspamd_connect(struct session *rs) { iobuf_xinit(&rs->iobuf, LINE_MAX, LINE_MAX, "on_eom"); @@ -433,3 +439,27 @@ rspamd_io(struct io *io, int evt) return; } +static void +datahold_stream(uint64_t id, FILE *fp, void *arg) +{ + struct session *rs = arg; + size_t sz; + ssize_t len; + int ret; + + errno = 0; + if ((len = getline(&rs->tx.line, &sz, fp)) == -1) { + if (errno) { + filter_api_reject_code(rs->id, FILTER_FAIL, 421, + "temporary failure"); + return; + } + filter_api_accept(rs->id); + return; + } + + rs->tx.line[strcspn(rs->tx.line, "\n")] = '\0'; + ret = rfc2822_parser_feed(&rs->tx.rfc2822_parser, + rs->tx.line); + datahold_stream(id, fp, arg); +} diff --git a/extras/filters/filter-rspamd/rspamd.h b/extras/filters/filter-rspamd/rspamd.h index d7446d2..8d47b5f 100644 --- a/extras/filters/filter-rspamd/rspamd.h +++ b/extras/filters/filter-rspamd/rspamd.h @@ -65,6 +65,7 @@ struct session *session_init(uint64_t); void session_reset(struct session *); void session_free(struct session *); +int rspamd_buffer(struct session *); int rspamd_connect(struct session *); void rspamd_connected(struct session *); void rspamd_error(struct session *); |