115 Commits

Author SHA1 Message Date
Alberto Bertogli
77d547288f Implement couriers
This patch introduces the couriers, which the queue uses to deliver mail.

We have a local courier (using procmail), a remote courier (uses SMTP), and a
router courier that decides which of the two to use based on a list of local
domains.

There are still a few things pending, but they all have their basic
functionality working and tested.
2015-11-13 03:41:06 +00:00
Alberto Bertogli
e5c2676f83 Convert addresses to lower case
This patch makes the MAIL FROM and RCPT TO commands convert addresses to lower
case. It also makes the commands themselves case-flexible as a side effect.
2015-11-06 10:27:11 +00:00
Alberto Bertogli
fbf1060b71 Introduce a trace wrapper
This patch introduces a wrapper to golang.org/x/net/trace with a new method
that will be useful later on, making logging and tracing less verbose.
2015-11-06 10:27:11 +00:00
Alberto Bertogli
58de5a6200 Add a skeleton queue
This patch introduces a basic, in-memory queue that only holds emails for now.

This slows down the benchmarks because we don't yet have a way to wait for
delivery (even if fake), that will come in later patches.
2015-11-06 10:27:05 +00:00
Alberto Bertogli
701f359634 Support getting listeners from systemd
Add a new module for getting listener sockets via systemd's file descriptor
passing (see sd_listen_fds(3) for more details), and make the main daemon use
it when "systemd" is given an address.
2015-11-01 02:19:23 +00:00
Alberto Bertogli
a809a3caa9 Basic configuration
This patch introduces a basic on disk configuration, comprised of a main
configuration file and per-domain directories.

It's still not complete, but will be extended in subsequent patches.
2015-11-01 02:19:12 +00:00
Alberto Bertogli
f055a3460e Do not allow repeated STARTTLS commands
Clients should only be able to do STARTTLS once.
2015-10-26 13:40:44 +00:00
Alberto Bertogli
8c22b3beef Add timeouts for the connection and individual commands
This patch introduces a general connection timeout (20m); and a shorter one
(1m) for individual command round-trips.

DATA is excluded from the latter, because it is expected that it takes more
time; we use the general connection timeout for it.
2015-10-26 04:06:40 +00:00
Alberto Bertogli
a5510607e8 Add some tests
This patch adds some tests that cover the SMTP commands, including STARTTLS
and various correctness checks.

There are also two simple benchmarks, that are not optimized and are more
useful for stress testing and profiling than anything else.
2015-10-26 03:40:33 +00:00
Alberto Bertogli
ca9c366087 Handle null reverse paths ("MAIL FROM:<>")
Null reverse paths are explicitly allowed, and used when sending delivery
notifications (https://tools.ietf.org/html/rfc2821#section-4.5.5).
2015-10-26 03:40:32 +00:00
Alberto Bertogli
5978c96fd6 Create a Server structure and start organizing its configuration
This is in preparation for the tests, which will come soon.
2015-10-26 03:40:32 +00:00
Alberto Bertogli
f5cab62c1e Implement STARTTLS 2015-10-26 03:40:32 +00:00
Alberto Bertogli
2c612002a9 Implement DATA receiving
This patch implements the receiving of DATA from the client.
We still don't do anything with it, though.
2015-10-26 03:40:32 +00:00
Alberto Bertogli
d92860c1de Implement more basic commands
Implement NOOP, RSET, MAIL FROM, RCPT TO, and the skeleton for DATA.
2015-10-26 03:40:32 +00:00
Alberto Bertogli
1ee6bf563e Initial commit
Extremely basic and hacky chasquid.go.
Hard-codes ports and hostname.

"Implements" EHLO, HELO, HELP and QUIT.
2015-10-26 03:40:26 +00:00