/* * Copyright (c) 2013 Eric Faurot * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "includes.h" #include #include #include #include #include static int on_connect(uint64_t id, struct filter_connect *conn) { log_info("info: session %016"PRIx64": on_connect: hostname=%s", id, conn->hostname); return filter_api_accept(id); } static int on_helo(uint64_t id, const char *helo) { log_info("info: session %016"PRIx64": on_helo: helo=%s", id, helo); return filter_api_accept(id); } static int on_mail(uint64_t id, struct mailaddr *mail) { log_info("info: session %016"PRIx64": on_mail: from=%s@%s", id, mail->user, mail->domain); return filter_api_accept(id); } static int on_rcpt(uint64_t id, struct mailaddr *rcpt) { log_info("info: session %016"PRIx64": on_rcpt: to=%s@%s", id, rcpt->user, rcpt->domain); return filter_api_accept(id); } static int on_data(uint64_t id) { log_info("info: session %016"PRIx64": on_data", id); return filter_api_accept(id); } static int on_eom(uint64_t id, size_t size) { log_info("info: session %016"PRIx64": on_eom: size=%zu", id, size); return filter_api_accept(id); } static void on_dataline(uint64_t id, const char *line) { log_info("info: session %016"PRIx64": on_dataline: line=\"%s\"", id, line); filter_api_writeln(id, line); } static void on_reset(uint64_t id) { log_info("info: session %016"PRIx64": on_reset", id); } static void on_disconnect(uint64_t id) { log_info("info: session %016"PRIx64": on_disconnect", id); } static void on_tx_begin(uint64_t id) { log_info("info: session %016"PRIx64": on_tx_begin", id); } static void on_tx_commit(uint64_t 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 main(int argc, char **argv) { int ch, d = 0, l = 1, v = 0; log_init(1); while ((ch = getopt(argc, argv, "dlv")) != -1) { switch (ch) { case 'd': d = 1; break; case 'l': l = 0; break; case 'v': v |= TRACE_DEBUG; break; default: log_warnx("warn: bad option"); return 1; /* NOTREACHED */ } } argc -= optind; argv += optind; log_init(d); log_verbose(v); log_debug("debug: starting..."); filter_api_on_connect(on_connect); filter_api_on_helo(on_helo); filter_api_on_mail(on_mail); filter_api_on_rcpt(on_rcpt); filter_api_on_data(on_data); if (l) filter_api_on_dataline(on_dataline); filter_api_on_eom(on_eom); filter_api_on_reset(on_reset); filter_api_on_disconnect(on_disconnect); 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(); log_debug("debug: exiting"); return 1; }