Age | Commit message (Collapse) | Author |
|
ok gilles@ sunil@
|
|
be better worked in tree
ok eric@, beck@
|
|
the identical io_set_blocking() and io_set_linger().
Since both are always called to turn off blocking or lingering,
nuke the parameter and associated enum in favour of "just doing the
right thing".
While passing remove the unneeded last parameter to the remaining
fcntl(F_GETFL).
Finally, rename the functions to io_set_nonblocking() and
io_set_nolinger() for clarity.
No functional change.
Started with a sweep of fcntl() usage inspired by guenther@.
ok gilles@
|
|
Ok eric@ millert@
|
|
OK sunil@
|
|
Ok gilles@
|
|
|
|
whose privileges would be used instead of the default.
Ok gilles@ jung@
|
|
RCPT TO within LMTP sessions
ok gilles eric
|
|
ok gilles@
|
|
Suggestion and ok millert@, ok gilles@, eric@
|
|
each .c file, and out of the .h files. To avoid overinclude.
ok gilles, in principle. If this has been done right, -portable should
become easier to maintain.
|
|
prepending from delivery_filename backend and prepend conditionally earlier
in the code path if delivery method is through mda or filename.
ok eric@
|
|
ok jmc@
|
|
in email address (ie: gilles+tag => ~/Maildir/.tag), instead use the folder
if it already exists and deliver to the mail Maildir otherwise.
ok eric@ and chl@
|
|
ensure the copy won't fail
|
|
to the mda delivery buffer. we should never hit these unless we mistakenly
change the value of a define, better be safe than sorry.
(void) cast strlcpy/strlcat that cannot truncate or that we know and want
to truncate rather than lose (informative data not used by smtpd but
intended to help the human reading the log)
|
|
process managing message reception, delivery and transfer. Mostly
mechanical, but very intrusive as it required to rewamp all IMSG to
fix ambiguities.
with and ok gilles@
|
|
|
|
- get rid of the whole penalty thing for failed envelopes in the mta and scheduler.
- do not disable routes on smtp errors
- try to schedule all types of envelopes on each scheduler frame.
|
|
bzero -> memset
|
|
ok gilles@
|
|
tempfail for limiting the number of pending deliveries to the same
user. This allows to reach optimal delivery time even in case of
burst, while keeping the number of inflight envelopes low.
|
|
|
|
another smtpd instance is running. Close the inherited socket in
every forked process but control.
|
|
|
|
- implement suspend/resume scheduling for individual envelopes or message,
with the associated smtpctl commands.
- allow the mta to request immediate scheduling of an envelope.
- on temporary failures a penalty can be given to further delay the next try.
|
|
now happens in queue_init(), and backends take the queue passwd as
parameter in their init function.
Remove useless SMTPD_FILTER_USER while there.
|
|
|
|
ok gilles@
|
|
consistency and clarity. Remove useless and confusing extra byte in
a few arrays based on this define.
ok gilles@
|
|
- handle getsockname() error in smtp_connected()
- accept '/' as part of user-part, expand to ':' as done by qmail
- fix wrong check in mda leading to bogus Return-Path header
- fix aliases parsing when there's a white space between key and separator
- some cosmethic cleanup
|
|
|
|
raise internal envelope limits.
simplify code.
ok gilles@
|
|
ok gilles@
|
|
* first bricks of ldap and sqlite support (not finished but both working)
* new table API to replace map API, all lookups are done through tables
* improved handling of temporary errors throughout the daemon
* improved scheduler and mta logic: connection reuse, optimizes batches
* improved queue: more tolerant to admin errors, new layout, less disk-IO
* improved memory usage under high load
* SSL certs/keys isolated to lookup process to avoid facing network
* VIRTUAL support improved, fully virtual setups possible now
* runtime tracing of processes through smtpctl trace
* ssl_privsep.c sync-ed with relayd
* ssl.c no longer contains smtpd specific interfaces
* smtpd-specific ssl bits moved to ssl_smtpd.c
* update mail address in copyright
FLUSH YOUR QUEUE. FLUSH YOUR QUEUE. FLUSH YOUR QUEUE. FLUSH YOUR QUEUE.
smtpd.conf(5) simplified, it will require adaptations
ok eric@
|
|
* Log more events (especially client session) and use a better scheme
for that: each messages is prefixed with a token to easily identify
its class:
- info/warn/debug: general server messages
- smtp-in: smtp client connections
- relay: status update for relayed messages
- delivery: status update for local deliveries
* Implement "smtpctl monitor" to display updates of selected internal
counters.
* When reloading the on-disk queue at startup do not commit a message
if no envelope was submitted for that message.
* Remove unused stuff in the config parser.
ok gilles@
|
|
- Introduce a mda_getlastline function(); improve the code to avoid
useless allocations and string formatting; make it return the last
line with content (skip trailing empty lines if found).
- Add a mechanism by which the mda can request the parent to abort a
local delivery by killing the process.
- Use ioev/iobuf for draining data to the delivery process.
- Make sure to catch all transient errors and make them result in a
tempfail rather than calling fatal().
- Make sure that the envelope status is properly set for all failures.
- Stop using SMTP response codes; it makes no sense in this context.
ok gilles@
|
|
pushing the fd with the envelope. This allows the mda to deal itself with
session limits. Envelopes are sent at full rate to the mda, which buffers
them on per-user queues, or sends them back for rescheduling if it already
has too many pending envelopes. Delivery sessions are created (within per-
user and global limits) to drain the queues.
This makes the server handle envelope bursts more efficiently.
ok gilles@
|
|
ok gilles@
|
|
of the delivery method. Bump the limit a bit.
requested by and ok gilles@
|
|
running at the same time. It prevents a user from consuming all mda "slots"
with a long-running filter in his .forward file. Other delivery types are
not affected.
ok gilles@ chl@
|
|
but still use uint32_t keys since ithe key is used as peerid in msg.
ok gilles@
|
|
while there unify usage of log_trace() in ramstat_set()
ok gilles@ eric@
|
|
It's confusing and not necessary as it's only used for "buffer".
Instead, just add a "buffer" member in the structure and rename
"as_user" to "user".
The delivery_data union becomes an anonymous union in expandnode,
which is the only other place where it's used.
ok gilles@
|
|
It automagically adds an rcpt=<user@domain> field if "dest" differs from
the original "rcpt". The function takes an "extra" parameter that allows
to add some specific info depending on the context.
ok gilles@
|
|
ok chl@
|
|
and put it out of profiling, so it's not accounted.
While there, for PROC_PARENT:
- set smtpd_process for PROC_PARENT
- use setproctitle() like other processes
ok gilles@
|
|
- statistics can now have a type (counter, timestamp, timeval, timespec and
possibly others in the future)
- stat_increment() / stat_decrement() now take an increment/decrement value
and are at the moment only of type counter
- stat_set() now takes a stat_value
- provide helpers to convert raw values to stat_value
ok eric@, ok chl@
while at it fix a rq_queue_dump() call using a bogus timestamp in scheduler
ramqueue.
|
|
ok gilles@ chl@
|