Rewrite the project

The previous project architecture was far too complicated and hard to
maintain. The new one is much more simple. Although procedural macros
are cools, they are a no-go on Rust-OpenSMTPD.

Reports and filter are implemented (except data-line) but untested.
This commit is contained in:
Rodolphe Bréard 2020-11-25 18:04:16 +01:00
parent fc072743ad
commit a6d4dd21c1
48 changed files with 1723 additions and 1493 deletions

45
examples/counter.rs Normal file
View file

@ -0,0 +1,45 @@
use log;
use opensmtpd::{register, run_filter, Address, Filter, ReportEntry};
use simplelog::{Config, LevelFilter, TermLogger, TerminalMode};
#[derive(Default)]
struct MyCounter {
nb_connected: u64,
nb_total: u64,
}
impl Filter for MyCounter {
register!(has_report_link_connect);
fn on_report_link_connect(
&mut self,
_entry: &ReportEntry,
_rdns: &str,
_fcrdns: &str,
_src: &Address,
_dest: &Address,
) {
self.nb_connected += 1;
self.nb_total += 1;
log::info!(
"New client (connected: {}, total: {})",
self.nb_connected,
self.nb_total
);
}
register!(has_report_link_disconnect);
fn on_report_link_disconnect(&mut self, _entry: &ReportEntry) {
self.nb_connected -= 1;
log::info!(
"Client left (connected: {}, total: {})",
self.nb_connected,
self.nb_total
);
}
}
fn main() {
TermLogger::init(LevelFilter::Debug, Config::default(), TerminalMode::Mixed).unwrap();
let mut my_counter: MyCounter = Default::default();
run_filter(&mut my_counter);
}

View file

@ -0,0 +1,4 @@
config|smtpd-version|6.6.1
config|smtp-session-timeout|300
config|subsystem|smtp-in
config|ready

View file

@ -0,0 +1,6 @@
config|smtpd-version|6.6.1
config|smtp-session-timeout|300
config|subsystem|smtp-in
config|ready
report|0.5|1576146008.006099|smtp-in|link-connect|7641df9771b4ed00|mail.openbsd.org|pass|199.185.178.25:33174|45.77.67.80:25
report|0.5|1576147242.200225|smtp-in|link-disconnect|7641dfb3798eb5bf