aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgilles <gilles@poolp.org>2016-06-24 08:50:58 +0200
committergilles <gilles@poolp.org>2016-06-24 08:50:58 +0200
commitec33d850725b0edc43250e22cef858449011f632 (patch)
tree0252ccfd09e937fec4655c6a8021d49e3913f5cc
parentadd missing files (diff)
downloadOpenSMTPD-extras-ec33d850725b0edc43250e22cef858449011f632.tar.xz
OpenSMTPD-extras-ec33d850725b0edc43250e22cef858449011f632.zip
fix headers inclusion + disable rspamd for now
-rw-r--r--api/dict.c3
-rw-r--r--api/filter_api.c6
-rw-r--r--api/mproc.c5
-rw-r--r--api/smtpd-api.h4
-rw-r--r--api/tree.c3
-rw-r--r--configure.ac24
-rw-r--r--extras/filters/filter-rspamd/filter_rspamd.c41
-rw-r--r--extras/filters/filter-rspamd/rspamd.c42
-rw-r--r--extras/filters/filter-rspamd/rspamd.h1
9 files changed, 66 insertions, 63 deletions
diff --git a/api/dict.c b/api/dict.c
index 5fc7416..1ef1a8c 100644
--- a/api/dict.c
+++ b/api/dict.c
@@ -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
diff --git a/api/tree.c b/api/tree.c
index 38e1a27..dc394bc 100644
--- a/api/tree.c
+++ b/api/tree.c
@@ -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 *);