From 78530ed774bacf2e4baba9463e89c0fe4ac67d20 Mon Sep 17 00:00:00 2001 From: Eric Faurot Date: Wed, 29 Jun 2016 08:51:15 +0200 Subject: Properly handle BEGIN COMMIT/ROLLBACK event sequences. Rename some API functions. Bump API version. --- api/filter_api.c | 137 +++++++++++---------- api/smtpd-api.h | 19 +-- extras/filters/filter-clamav/filter_clamav.c | 8 +- .../filter-dkim-signer/filter_dkim_signer.c | 8 +- extras/filters/filter-lua/filter_lua.c | 46 +++++-- extras/filters/filter-perl/filter_perl.c | 30 +++-- extras/filters/filter-python/filter_python.c | 53 +++++--- extras/filters/filter-regex/filter_regex.c | 8 +- .../filter-spamassassin/filter_spamassassin.c | 8 +- extras/filters/filter-stub/filter_stub.c | 19 ++- extras/filters/filter-trace/filter_trace.c | 19 ++- 11 files changed, 216 insertions(+), 139 deletions(-) diff --git a/api/filter_api.c b/api/filter_api.c index e932928..13adaad 100644 --- a/api/filter_api.c +++ b/api/filter_api.c @@ -112,8 +112,9 @@ static struct filter_internals { void (*disconnect)(uint64_t); void (*reset)(uint64_t); - void (*commit)(uint64_t); - void (*rollback)(uint64_t); + void (*tx_begin)(uint64_t); + void (*tx_commit)(uint64_t); + void (*tx_rollback)(uint64_t); } cb; void *(*session_allocator)(uint64_t); @@ -138,8 +139,9 @@ static void filter_dispatch_helo(uint64_t, const char *); static void filter_dispatch_mail(uint64_t, struct mailaddr *); static void filter_dispatch_rcpt(uint64_t, struct mailaddr *); static void filter_dispatch_reset(uint64_t); -static void filter_dispatch_commit(uint64_t); -static void filter_dispatch_rollback(uint64_t); +static void filter_dispatch_tx_begin(uint64_t); +static void filter_dispatch_tx_commit(uint64_t); +static void filter_dispatch_tx_rollback(uint64_t); static void filter_dispatch_disconnect(uint64_t); static void filter_trigger_eom(struct filter_session *); @@ -276,12 +278,6 @@ filter_dispatch(struct mproc *p, struct imsg *imsg) case EVENT_DISCONNECT: filter_dispatch_disconnect(id); s = tree_xget(&sessions, id); - if (fi.transaction_destructor) { - if (s->transaction) { - fi.transaction_destructor(s->transaction); - s->transaction = NULL; - } - } if (fi.session_destructor) { if (s->session) fi.session_destructor(s->session); @@ -294,36 +290,21 @@ filter_dispatch(struct mproc *p, struct imsg *imsg) case EVENT_RESET: filter_dispatch_reset(id); s = tree_xget(&sessions, id); - if (fi.transaction_destructor) { - if (s->transaction) { - fi.transaction_destructor(s->transaction); - s->transaction = NULL; - } - } if (s->data_buffer) data_buffered_release(s); break; - case EVENT_COMMIT: - filter_dispatch_commit(id); + case EVENT_TX_BEGIN: + filter_dispatch_tx_begin(id); + break; + case EVENT_TX_COMMIT: + filter_dispatch_tx_commit(id); s = tree_xget(&sessions, id); - if (fi.transaction_destructor) { - if (s->transaction) { - fi.transaction_destructor(s->transaction); - s->transaction = NULL; - } - } if (s->data_buffer) data_buffered_release(s); break; - case EVENT_ROLLBACK: - filter_dispatch_rollback(id); + case EVENT_TX_ROLLBACK: + filter_dispatch_tx_rollback(id); s = tree_xget(&sessions, id); - if (fi.transaction_destructor) { - if (s->transaction) { - fi.transaction_destructor(s->transaction); - s->transaction = NULL; - } - } if (s->data_buffer) data_buffered_release(s); break; @@ -356,12 +337,6 @@ filter_dispatch(struct mproc *p, struct imsg *imsg) case QUERY_MAIL: m_get_mailaddr(&m, &maddr); m_end(&m); - - if (fi.transaction_allocator) { - s = tree_xget(&sessions, id); - s->transaction = fi.transaction_allocator(id); - } - filter_register_query(id, qid, type); filter_dispatch_mail(id, &maddr); break; @@ -481,13 +456,6 @@ filter_dispatch_helo(uint64_t id, const char *helo) static void filter_dispatch_mail(uint64_t id, struct mailaddr *mail) { - struct filter_session *s; - - s = tree_xget(&sessions, id); - if (s->tx) - fatalx("transaction already started"); - s->tx = 1; - if (fi.cb.mail) fi.cb.mail(id, mail); else @@ -517,17 +485,34 @@ filter_dispatch_reset(uint64_t id) { if (fi.cb.reset) fi.cb.reset(id); - filter_dispatch_rollback(id); } static void -filter_dispatch_commit(uint64_t id) +filter_dispatch_tx_begin(uint64_t id) +{ + struct filter_session *s; + + s = tree_xget(&sessions, id); + if (s->tx) + fatalx("tx-begin: session %016"PRIx64" in transaction", id); + + s->tx = 1; + + if (fi.transaction_allocator) + s->transaction = fi.transaction_allocator(id); + + if (fi.cb.tx_begin) + fi.cb.tx_begin(id); +} + +static void +filter_dispatch_tx_commit(uint64_t id) { struct filter_session *s; s = tree_xget(&sessions, id); if (s->tx == 0) - fatalx("commit: session %016"PRIx64" not in transaction", id); + fatalx("tx-commit: session %016"PRIx64" not in transaction", id); s->tx = 0; io_clear(&s->pipe.oev); @@ -535,18 +520,23 @@ filter_dispatch_commit(uint64_t id) io_clear(&s->pipe.iev); iobuf_clear(&s->pipe.ibuf); - if (fi.cb.commit) - fi.cb.commit(id); + if (fi.cb.tx_commit) + fi.cb.tx_commit(id); + + if (fi.transaction_destructor && s->transaction) { + fi.transaction_destructor(s->transaction); + s->transaction = NULL; + } } static void -filter_dispatch_rollback(uint64_t id) +filter_dispatch_tx_rollback(uint64_t id) { struct filter_session *s; s = tree_xget(&sessions, id); if (s->tx == 0) - return; + fatalx("tx-rollback: session %016"PRIx64" not in transaction", id); s->tx = 0; io_clear(&s->pipe.oev); @@ -554,16 +544,18 @@ filter_dispatch_rollback(uint64_t id) io_clear(&s->pipe.iev); iobuf_clear(&s->pipe.ibuf); - if (fi.cb.rollback) - fi.cb.rollback(id); + if (fi.cb.tx_rollback) + fi.cb.tx_rollback(id); + + if (fi.transaction_destructor && s->transaction) { + fi.transaction_destructor(s->transaction); + s->transaction = NULL; + } } static void filter_dispatch_disconnect(uint64_t id) { - - filter_dispatch_rollback(id); - if (fi.cb.disconnect) fi.cb.disconnect(id); } @@ -776,8 +768,9 @@ hook_to_str(int hook) CASE(HOOK_EOM); CASE(HOOK_RESET); CASE(HOOK_DISCONNECT); - CASE(HOOK_COMMIT); - CASE(HOOK_ROLLBACK); + CASE(HOOK_TX_BEGIN); + CASE(HOOK_TX_COMMIT); + CASE(HOOK_TX_ROLLBACK); CASE(HOOK_DATALINE); default: return ("HOOK_???"); @@ -807,8 +800,9 @@ event_to_str(int event) CASE(EVENT_CONNECT); CASE(EVENT_RESET); CASE(EVENT_DISCONNECT); - CASE(EVENT_COMMIT); - CASE(EVENT_ROLLBACK); + CASE(EVENT_TX_BEGIN); + CASE(EVENT_TX_COMMIT); + CASE(EVENT_TX_ROLLBACK); default: return ("EVENT_???"); } @@ -1039,21 +1033,30 @@ filter_api_on_disconnect(void(*cb)(uint64_t)) } void -filter_api_on_commit(void(*cb)(uint64_t)) +filter_api_on_tx_begin(void(*cb)(uint64_t)) +{ + filter_api_init(); + + fi.hooks |= HOOK_TX_BEGIN; + fi.cb.tx_begin = cb; +} + +void +filter_api_on_tx_commit(void(*cb)(uint64_t)) { filter_api_init(); - fi.hooks |= HOOK_COMMIT; - fi.cb.commit = cb; + fi.hooks |= HOOK_TX_COMMIT; + fi.cb.tx_commit = cb; } void -filter_api_on_rollback(void(*cb)(uint64_t)) +filter_api_on_tx_rollback(void(*cb)(uint64_t)) { filter_api_init(); - fi.hooks |= HOOK_ROLLBACK; - fi.cb.rollback = cb; + fi.hooks |= HOOK_TX_ROLLBACK; + fi.cb.tx_rollback = cb; } void diff --git a/api/smtpd-api.h b/api/smtpd-api.h index 8c6c7af..103320e 100644 --- a/api/smtpd-api.h +++ b/api/smtpd-api.h @@ -36,7 +36,7 @@ #include "log.h" #include "rfc2822.h" -#define FILTER_API_VERSION 50 +#define FILTER_API_VERSION 51 enum blockmodes { BM_NORMAL, @@ -113,8 +113,9 @@ enum filter_event_type { EVENT_CONNECT, EVENT_RESET, EVENT_DISCONNECT, - EVENT_COMMIT, - EVENT_ROLLBACK, + EVENT_TX_BEGIN, + EVENT_TX_COMMIT, + EVENT_TX_ROLLBACK, }; /* XXX - server side requires mfa_session.c update on filter_hook changes */ @@ -138,9 +139,10 @@ enum filter_hook_type { HOOK_EOM = 1 << 5, HOOK_RESET = 1 << 6, HOOK_DISCONNECT = 1 << 7, - HOOK_COMMIT = 1 << 8, - HOOK_ROLLBACK = 1 << 9, - HOOK_DATALINE = 1 << 10, + HOOK_TX_BEGIN = 1 << 8, + HOOK_TX_COMMIT = 1 << 9, + HOOK_TX_ROLLBACK = 1 << 10, + HOOK_DATALINE = 1 << 11, }; struct filter_connect { @@ -419,8 +421,9 @@ void filter_api_on_dataline(void(*)(uint64_t, const char *)); void filter_api_on_eom(int(*)(uint64_t, size_t)); void filter_api_on_reset(void(*)(uint64_t)); void filter_api_on_disconnect(void(*)(uint64_t)); -void filter_api_on_commit(void(*)(uint64_t)); -void filter_api_on_rollback(void(*)(uint64_t)); +void filter_api_on_tx_begin(void(*)(uint64_t)); +void filter_api_on_tx_commit(void(*)(uint64_t)); +void filter_api_on_tx_rollback(void(*)(uint64_t)); const char *proc_name(enum smtp_proc_type); const char *imsg_to_str(int); diff --git a/extras/filters/filter-clamav/filter_clamav.c b/extras/filters/filter-clamav/filter_clamav.c index afe9f1a..7f505d2 100644 --- a/extras/filters/filter-clamav/filter_clamav.c +++ b/extras/filters/filter-clamav/filter_clamav.c @@ -203,14 +203,14 @@ clamav_on_eom(uint64_t id, size_t size) } static void -clamav_on_commit(uint64_t id) +clamav_on_tx_commit(uint64_t id) { clamav_clear(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); } static void -clamav_on_rollback(uint64_t id) +clamav_on_tx_rollback(uint64_t id) { clamav_clear(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); @@ -291,8 +291,8 @@ main(int argc, char **argv) filter_api_on_data(clamav_on_data); filter_api_on_dataline(clamav_on_dataline); filter_api_on_eom(clamav_on_eom); - filter_api_on_commit(clamav_on_commit); - filter_api_on_rollback(clamav_on_rollback); + filter_api_on_tx_commit(clamav_on_tx_commit); + filter_api_on_tx_rollback(clamav_on_tx_rollback); filter_api_loop(); log_debug("debug: exiting"); diff --git a/extras/filters/filter-dkim-signer/filter_dkim_signer.c b/extras/filters/filter-dkim-signer/filter_dkim_signer.c index acbe918..2707ad4 100644 --- a/extras/filters/filter-dkim-signer/filter_dkim_signer.c +++ b/extras/filters/filter-dkim-signer/filter_dkim_signer.c @@ -226,14 +226,14 @@ done: } static void -dkim_signer_on_commit(uint64_t id) +dkim_signer_on_tx_commit(uint64_t id) { dkim_signer_clear(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); } static void -dkim_signer_on_rollback(uint64_t id) +dkim_signer_on_tx_rollback(uint64_t id) { dkim_signer_clear(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); @@ -309,8 +309,8 @@ main(int argc, char **argv) filter_api_on_data(dkim_signer_on_data); filter_api_on_dataline(dkim_signer_on_dataline); filter_api_on_eom(dkim_signer_on_eom); - filter_api_on_commit(dkim_signer_on_commit); - filter_api_on_rollback(dkim_signer_on_rollback); + filter_api_on_tx_commit(dkim_signer_on_tx_commit); + filter_api_on_tx_rollback(dkim_signer_on_tx_rollback); if (c) filter_api_set_chroot(c); if (C) diff --git a/extras/filters/filter-lua/filter_lua.c b/extras/filters/filter-lua/filter_lua.c index e4c1324..c2c8781 100644 --- a/extras/filters/filter-lua/filter_lua.c +++ b/extras/filters/filter-lua/filter_lua.c @@ -277,32 +277,48 @@ on_eom(uint64_t id, size_t size) } static void -on_commit(uint64_t id) +on_tx_begin(uint64_t id) { char s_id[ID_STR_SZ]; (void)snprintf(s_id, sizeof(s_id), "%016"PRIx64"", id); - lua_getglobal(L, "on_commit"); + lua_getglobal(L, "on_tx_begin"); lua_pushstring(L, s_id); if (lua_pcall(L, 1, 0, 0)) { - log_warnx("warn: on_commit: %s", + log_warnx("warn: on_tx_begin: %s", lua_tostring(L, -1)); exit(1); } } static void -on_rollback(uint64_t id) +on_tx_commit(uint64_t id) { char s_id[ID_STR_SZ]; (void)snprintf(s_id, sizeof(s_id), "%016"PRIx64"", id); - lua_getglobal(L, "on_rollback"); + lua_getglobal(L, "on_tx_commit"); lua_pushstring(L, s_id); if (lua_pcall(L, 1, 0, 0)) { - log_warnx("warn: on_rollback: %s", + log_warnx("warn: on_tx_commit: %s", + lua_tostring(L, -1)); + exit(1); + } +} + +static void +on_tx_rollback(uint64_t id) +{ + char s_id[ID_STR_SZ]; + + (void)snprintf(s_id, sizeof(s_id), "%016"PRIx64"", id); + lua_getglobal(L, "on_tx_rollback"); + lua_pushstring(L, s_id); + + if (lua_pcall(L, 1, 0, 0)) { + log_warnx("warn: on_tx_rollback: %s", lua_tostring(L, -1)); exit(1); } @@ -429,16 +445,22 @@ main(int argc, char **argv) filter_api_on_eom(on_eom); } - lua_getglobal(L, "on_commit"); + lua_getglobal(L, "on_tx_begin"); + if (lua_isfunction(L, 1)) { + log_debug("debug: on_tx_begin is present"); + filter_api_on_tx_begin(on_tx_begin); + } + + lua_getglobal(L, "on_tx_commit"); if (lua_isfunction(L, 1)) { - log_debug("debug: on_commit is present"); - filter_api_on_commit(on_commit); + log_debug("debug: on_tx_commit is present"); + filter_api_on_tx_commit(on_tx_commit); } - lua_getglobal(L, "on_rollback"); + lua_getglobal(L, "on_tx_rollback"); if (lua_isfunction(L, 1)) { - log_debug("debug: on_rollback is present"); - filter_api_on_rollback(on_rollback); + log_debug("debug: on_tx_rollback is present"); + filter_api_on_tx_rollback(on_tx_rollback); } lua_getglobal(L, "on_disconnect"); diff --git a/extras/filters/filter-perl/filter_perl.c b/extras/filters/filter-perl/filter_perl.c index f52d056..e58d004 100644 --- a/extras/filters/filter-perl/filter_perl.c +++ b/extras/filters/filter-perl/filter_perl.c @@ -38,8 +38,9 @@ static CV *pl_on_mail; static CV *pl_on_rcpt; static CV *pl_on_data; static CV *pl_on_eom; -static CV *pl_on_commit; -static CV *pl_on_rollback; +static CV *pl_on_tx_begin; +static CV *pl_on_tx_commit; +static CV *pl_on_tx_rollback; static CV *pl_on_dataline; static CV *pl_on_disconnect; @@ -187,16 +188,23 @@ on_eom(uint64_t id, size_t size) } static void -on_commit(uint64_t id) +on_tx_begin(uint64_t id) { - call_sub_sv((SV *)pl_on_commit, "%i", id); + call_sub_sv((SV *)pl_on_tx_begin, "%i", id); return; } static void -on_rollback(uint64_t id) +on_tx_commit(uint64_t id) { - call_sub_sv((SV *)pl_on_rollback, "%i", id); + call_sub_sv((SV *)pl_on_tx_commit, "%i", id); + return; +} + +static void +on_tx_rollback(uint64_t id) +{ + call_sub_sv((SV *)pl_on_tx_rollback, "%i", id); return; } @@ -272,10 +280,12 @@ main(int argc, char **argv) filter_api_on_data(on_data); if ((pl_on_eom = perl_get_cv("on_eom", FALSE))) filter_api_on_eom(on_eom); - if ((pl_on_commit = perl_get_cv("on_commit", FALSE))) - filter_api_on_commit(on_commit); - if ((pl_on_rollback = perl_get_cv("on_rollback", FALSE))) - filter_api_on_rollback(on_rollback); + if ((pl_on_tx_begin = perl_get_cv("on_tx_begin", FALSE))) + filter_api_on_tx_begin(on_tx_begin); + if ((pl_on_tx_commit = perl_get_cv("on_tx_commit", FALSE))) + filter_api_on_tx_commit(on_tx_commit); + if ((pl_on_tx_rollback = perl_get_cv("on_tx_rollback", FALSE))) + filter_api_on_rollback(on_tx_rollback); if ((pl_on_dataline = perl_get_cv("on_dataline", FALSE))) filter_api_on_dataline(on_dataline); if ((pl_on_disconnect = perl_get_cv("on_disconnect", FALSE))) diff --git a/extras/filters/filter-python/filter_python.c b/extras/filters/filter-python/filter_python.c index 14c4457..33c1f4b 100644 --- a/extras/filters/filter-python/filter_python.c +++ b/extras/filters/filter-python/filter_python.c @@ -40,8 +40,9 @@ static PyObject *py_on_data; static PyObject *py_on_eom; static PyObject *py_on_dataline; -static PyObject *py_on_commit; -static PyObject *py_on_rollback; +static PyObject *py_on_tx_begin; +static PyObject *py_on_tx_commit; +static PyObject *py_on_tx_rollback; static PyObject *py_on_disconnect; @@ -277,7 +278,7 @@ on_eom(uint64_t id, size_t sz) } static void -on_commit(uint64_t id) +on_tx_begin(uint64_t id) { PyObject *py_args; PyObject *py_ret; @@ -286,18 +287,18 @@ on_commit(uint64_t id) py_args = PyTuple_New(1); py_id = PyLong_FromUnsignedLongLong(id); PyTuple_SetItem(py_args, 0, py_id); - py_ret = PyObject_CallObject(py_on_commit, py_args); + py_ret = PyObject_CallObject(py_on_tx_begin, py_args); Py_DECREF(py_args); if (py_ret == NULL) { PyErr_Print(); - log_warnx("warn: on_commit: handler failed"); + log_warnx("warn: on_tx_begin: handler failed"); exit(1); } } static void -on_rollback(uint64_t id) +on_tx_commit(uint64_t id) { PyObject *py_args; PyObject *py_ret; @@ -306,12 +307,32 @@ on_rollback(uint64_t id) py_args = PyTuple_New(1); py_id = PyLong_FromUnsignedLongLong(id); PyTuple_SetItem(py_args, 0, py_id); - py_ret = PyObject_CallObject(py_on_rollback, py_args); + py_ret = PyObject_CallObject(py_on_tx_commit, py_args); Py_DECREF(py_args); if (py_ret == NULL) { PyErr_Print(); - log_warnx("warn: on_rollback: handler failed"); + log_warnx("warn: on_tx_commit: handler failed"); + exit(1); + } +} + +static void +on_tx_rollback(uint64_t id) +{ + PyObject *py_args; + PyObject *py_ret; + PyObject *py_id; + + py_args = PyTuple_New(1); + py_id = PyLong_FromUnsignedLongLong(id); + PyTuple_SetItem(py_args, 0, py_id); + py_ret = PyObject_CallObject(py_on_tx_rollback, py_args); + Py_DECREF(py_args); + + if (py_ret == NULL) { + PyErr_Print(); + log_warnx("warn: on_tx_rollback: handler failed"); exit(1); } } @@ -485,13 +506,17 @@ main(int argc, char **argv) if (py_on_eom && PyCallable_Check(py_on_eom)) filter_api_on_eom(on_eom); - py_on_commit = PyObject_GetAttrString(module, "on_commit"); - if (py_on_commit && PyCallable_Check(py_on_commit)) - filter_api_on_commit(on_commit); + py_on_tx_begin = PyObject_GetAttrString(module, "on_tx_begin"); + if (py_on_tx_begin && PyCallable_Check(py_on_tx_begin)) + filter_api_on_tx_begin(on_tx_begin); + + py_on_tx_commit = PyObject_GetAttrString(module, "on_tx_commit"); + if (py_on_tx_commit && PyCallable_Check(py_on_tx_commit)) + filter_api_on_tx_commit(on_tx_commit); - py_on_rollback = PyObject_GetAttrString(module, "on_rollback"); - if (py_on_rollback && PyCallable_Check(py_on_rollback)) - filter_api_on_rollback(on_rollback); + py_on_tx_rollback = PyObject_GetAttrString(module, "on_tx_rollback"); + if (py_on_tx_rollback && PyCallable_Check(py_on_tx_rollback)) + filter_api_on_tx_rollback(on_tx_rollback); py_on_dataline = PyObject_GetAttrString(module, "on_dataline"); if (py_on_dataline && PyCallable_Check(py_on_dataline)) diff --git a/extras/filters/filter-regex/filter_regex.c b/extras/filters/filter-regex/filter_regex.c index 8106cbc..02fd36e 100644 --- a/extras/filters/filter-regex/filter_regex.c +++ b/extras/filters/filter-regex/filter_regex.c @@ -229,14 +229,14 @@ regex_on_eom(uint64_t id, size_t size) } static void -regex_on_commit(uint64_t id) +regex_on_tx_commit(uint64_t id) { free(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); } static void -regex_on_rollback(uint64_t id) +regex_on_tx_rollback(uint64_t id) { free(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); @@ -291,8 +291,8 @@ main(int argc, char **argv) filter_api_on_rcpt(regex_on_rcpt); filter_api_on_dataline(regex_on_dataline); filter_api_on_eom(regex_on_eom); - filter_api_on_commit(regex_on_commit); - filter_api_on_rollback(regex_on_rollback); + filter_api_on_tx_commit(regex_on_tx_commit); + filter_api_on_tx_rollback(regex_on_tx_rollback); filter_api_loop(); regex_clear(); diff --git a/extras/filters/filter-spamassassin/filter_spamassassin.c b/extras/filters/filter-spamassassin/filter_spamassassin.c index d765b2f..264aa20 100644 --- a/extras/filters/filter-spamassassin/filter_spamassassin.c +++ b/extras/filters/filter-spamassassin/filter_spamassassin.c @@ -250,14 +250,14 @@ spamassassin_on_eom(uint64_t id, size_t size) } static void -spamassassin_on_commit(uint64_t id) +spamassassin_on_tx_commit(uint64_t id) { spamassassin_clear(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); } static void -spamassassin_on_rollback(uint64_t id) +spamassassin_on_tx_rollback(uint64_t id) { spamassassin_clear(filter_api_get_udata(id)); filter_api_set_udata(id, NULL); @@ -358,8 +358,8 @@ main(int argc, char **argv) filter_api_on_data(spamassassin_on_data); filter_api_on_dataline(spamassassin_on_dataline); filter_api_on_eom(spamassassin_on_eom); - filter_api_on_commit(spamassassin_on_commit); - filter_api_on_rollback(spamassassin_on_rollback); + filter_api_on_tx_commit(spamassassin_on_tx_commit); + filter_api_on_tx_rollback(spamassassin_on_tx_rollback); filter_api_loop(); log_debug("debug: exiting"); diff --git a/extras/filters/filter-stub/filter_stub.c b/extras/filters/filter-stub/filter_stub.c index dd7e0af..5b6c240 100644 --- a/extras/filters/filter-stub/filter_stub.c +++ b/extras/filters/filter-stub/filter_stub.c @@ -80,15 +80,21 @@ on_reset(uint64_t id) } static void -on_commit(uint64_t id) +on_tx_begin(uint64_t id) { - log_debug("debug: on_commit"); + log_debug("debug: on_tx_begin"); } static void -on_rollback(uint64_t id) +on_tx_commit(uint64_t id) { - log_debug("debug: on_rollback"); + log_debug("debug: on_tx_commit"); +} + +static void +on_tx_rollback(uint64_t id) +{ + log_debug("debug: on_tx_rollback"); } static void @@ -134,8 +140,9 @@ main(int argc, char **argv) filter_api_on_reset(on_reset); filter_api_on_eom(on_eom); filter_api_on_dataline(on_dataline); - filter_api_on_commit(on_commit); - filter_api_on_rollback(on_rollback); + filter_api_on_tx_begin(on_tx_begin); + filter_api_on_tx_commit(on_tx_commit); + filter_api_on_tx_rollback(on_tx_rollback); filter_api_on_disconnect(on_disconnect); filter_api_loop(); diff --git a/extras/filters/filter-trace/filter_trace.c b/extras/filters/filter-trace/filter_trace.c index 15e4226..02918e1 100644 --- a/extras/filters/filter-trace/filter_trace.c +++ b/extras/filters/filter-trace/filter_trace.c @@ -90,15 +90,21 @@ on_disconnect(uint64_t id) } static void -on_commit(uint64_t id) +on_tx_begin(uint64_t id) { - log_info("info: session %016"PRIx64": on_commit", id); + log_info("info: session %016"PRIx64": on_tx_begin", id); } static void -on_rollback(uint64_t id) +on_tx_commit(uint64_t id) { - log_info("info: session %016"PRIx64": on_rollback", id); + log_info("info: session %016"PRIx64": on_tx_commit", id); +} + +static void +on_tx_rollback(uint64_t id) +{ + log_info("info: session %016"PRIx64": on_tx_rollback", id); } int @@ -144,8 +150,9 @@ main(int argc, char **argv) filter_api_on_reset(on_reset); filter_api_on_disconnect(on_disconnect); - filter_api_on_commit(on_commit); - filter_api_on_rollback(on_rollback); + filter_api_on_tx_begin(on_tx_begin); + filter_api_on_tx_commit(on_tx_commit); + filter_api_on_tx_rollback(on_tx_rollback); filter_api_loop(); -- cgit v1.2.3-59-g8ed1b