1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00

aliases: Implement aliases hooks

This patch implements two new hooks: alias-resolve and alias-exists.

They are called during the aliases resolution process, to allow for more
complex integration with other systems, such as storing the aliases in a
database.

See the included documentation for more details.
This commit is contained in:
Alberto Bertogli
2019-10-22 22:05:09 +01:00
parent dea6f73164
commit f399fe3e84
8 changed files with 253 additions and 36 deletions

View File

@@ -77,5 +77,16 @@ The `chasquid-util` command-line tool can be used to check and resolve
aliases.
## Hooks
There are two hooks that allow more sophisticated aliases resolution:
`alias-exists` and `alias-resolve`.
If they exist, they are invoked as part of the resolution process and the
results are merged with the file-based resolution results.
See the [hooks](hooks.md) documentation for more details.
[chasquid]: https://blitiri.com.ar/p/chasquid
[email aliases]: https://en.wikipedia.org/wiki/Email_alias

View File

@@ -1,5 +1,13 @@
# Post-DATA hook
# Hooks
chasquid supports some functionality via hooks, which are binaries that get
executed at specific points in time during delivery.
They are optional, and will be skipped if they don't exist.
## Post-DATA hook
After completion of DATA, but before accepting the mail for queueing, chasquid
will run the command at `$config_dir/hooks/post-data`.
@@ -21,7 +29,7 @@ This hook can be used to block based on contents, for example to check for
spam or virus. See `etc/hooks/post-data` for an example.
## Environment
### Environment
This hook will run as the chasquid user, so be careful about permissions and
privileges.
@@ -43,3 +51,34 @@ The environment will contain the following variables:
There is a 1 minute timeout for hook execution.
It will be run at the config directory.
## Alias resolve hook
When an alias needs to be resolved, chasquid will run the command at
`$config_dir/hooks/alias-resolve` (if the file exists).
The address to resolve will be passed as the single argument.
The output of the command will be parsed as if it was the right-hand side of
the aliases configuration file (see [Aliases](aliases.md) for more details).
Results are appended to the results of the file-based alias resolution.
If there is no alias for the address, the hook should just exit successfuly
without emitting any output.
There is a 5 second timeout for hook execution. If the hook exits with an
error, including timeout, delivery will fail.
## Alias exists hook
When chasquid needs to check whether an alias exists or not, it will run the
command at `$config_dir/hooks/alias-exists` (if the file exists).
The address to check will be passed as the single argument.
If the commands exits successfuly (exit code 0), then the alias exists; any
other exit code signals that the alias does not exist.
There is a 5 second timeout for hook execution. If the hook times out, the
alias will be assumed not to exist.