aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgilles <gilles@poolp.org>2016-06-24 10:06:49 +0200
committergilles <gilles@poolp.org>2016-06-24 10:06:49 +0200
commit305755a9c8f8ae59fa330703d30ba9bbbcea3c42 (patch)
tree1be8d8b0d246e4d3efca44f5b76bd6f3ba1e1ce2
parentfix headers inclusion + disable rspamd for now (diff)
downloadOpenSMTPD-extras-305755a9c8f8ae59fa330703d30ba9bbbcea3c42.tar.xz
OpenSMTPD-extras-305755a9c8f8ae59fa330703d30ba9bbbcea3c42.zip
session_allocator / session_destructor API
-rw-r--r--api/filter_api.c30
-rw-r--r--api/smtpd-api.h4
2 files changed, 34 insertions, 0 deletions
diff --git a/api/filter_api.c b/api/filter_api.c
index 547010f..2be9cae 100644
--- a/api/filter_api.c
+++ b/api/filter_api.c
@@ -72,6 +72,7 @@ struct filter_session {
void (*datahold_cb)(uint64_t, FILE *, void *);
void *datahold_arg;
+ void *session;
void *udata;
};
@@ -109,6 +110,9 @@ static struct filter_internals {
void (*commit)(uint64_t);
void (*rollback)(uint64_t);
} cb;
+
+ void *(*session_allocator)(uint64_t);
+ void (*session_destructor)(void *);
} fi;
static void filter_api_init(void);
@@ -252,9 +256,14 @@ filter_dispatch(struct mproc *p, struct imsg *imsg)
s->pipe.iev.sock = -1;
s->pipe.oev.sock = -1;
tree_xset(&sessions, id, s);
+ if (fi.session_allocator)
+ s->session = fi.session_allocator(id);
break;
case EVENT_DISCONNECT:
filter_dispatch_disconnect(id);
+ s = tree_xget(&sessions, id);
+ if (fi.session_destructor)
+ fi.session_destructor(s->session);
s = tree_xpop(&sessions, id);
free(s);
break;
@@ -772,6 +781,27 @@ imsg_to_str(int imsg)
*/
void
+filter_api_session_allocator(void *(*f)(uint64_t))
+{
+ fi.session_allocator = f;
+}
+
+void
+filter_api_session_destructor(void (*f)(void *))
+{
+ fi.session_destructor = f;
+}
+
+void *
+filter_api_session(uint64_t id)
+{
+ struct filter_session *s;
+
+ s = tree_xget(&sessions, id);
+ return s->session;
+}
+
+void
filter_api_setugid(uid_t uid, gid_t gid)
{
filter_api_init();
diff --git a/api/smtpd-api.h b/api/smtpd-api.h
index 9b346dd..9bb7b37 100644
--- a/api/smtpd-api.h
+++ b/api/smtpd-api.h
@@ -379,6 +379,10 @@ const char *esc_description(enum enhanced_status_code);
/* filter_api.c */
+void filter_api_session_allocator(void *(*)(uint64_t));
+void filter_api_session_destructor(void (*)(void *));
+void *filter_api_session(uint64_t);
+
void filter_api_setugid(uid_t, gid_t);
void filter_api_set_chroot(const char *);
void filter_api_no_chroot(void);