diff options
author | gilles <gilles@poolp.org> | 2016-06-24 10:06:49 +0200 |
---|---|---|
committer | gilles <gilles@poolp.org> | 2016-06-24 10:06:49 +0200 |
commit | 305755a9c8f8ae59fa330703d30ba9bbbcea3c42 (patch) | |
tree | 1be8d8b0d246e4d3efca44f5b76bd6f3ba1e1ce2 | |
parent | fix headers inclusion + disable rspamd for now (diff) | |
download | OpenSMTPD-extras-305755a9c8f8ae59fa330703d30ba9bbbcea3c42.tar.xz OpenSMTPD-extras-305755a9c8f8ae59fa330703d30ba9bbbcea3c42.zip |
session_allocator / session_destructor API
-rw-r--r-- | api/filter_api.c | 30 | ||||
-rw-r--r-- | api/smtpd-api.h | 4 |
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); |