mirror of
https://github.com/docker-mailserver/docker-mailserver.git
synced 2024-01-19 02:48:50 +00:00
ci(fix): Normalize for .gitattributes
+ improve eclint
coverage (#3566)
This commit is contained in:
parent
bd96c1161e
commit
aae42fae9b
|
@ -8,6 +8,7 @@ root = true
|
||||||
[*]
|
[*]
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
|
indent_size = 2
|
||||||
indent_style = space
|
indent_style = space
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = true
|
||||||
|
@ -16,21 +17,9 @@ trim_trailing_whitespace = true
|
||||||
# --- Specific ----------------------------------
|
# --- Specific ----------------------------------
|
||||||
# -----------------------------------------------
|
# -----------------------------------------------
|
||||||
|
|
||||||
[*.{yaml,yml,sh,bats}]
|
[{Makefile,.gitmodules}]
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[Makefile]
|
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
trim_trailing_whitespace = false
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
# -----------------------------------------------
|
|
||||||
# --- Git Submodules ----------------------------
|
|
||||||
# -----------------------------------------------
|
|
||||||
|
|
||||||
[{test/bats/**,test/test_helper/**}]
|
|
||||||
indent_style = none
|
|
||||||
indent_size = none
|
|
||||||
end_of_line = none
|
|
||||||
|
|
6
.github/pull_request_template.md
vendored
6
.github/pull_request_template.md
vendored
|
@ -1,7 +1,9 @@
|
||||||
# Description
|
# Description
|
||||||
|
|
||||||
<!-- Include a summary of the change.
|
<!--
|
||||||
Please also include relevant motivation and context. -->
|
Include a summary of the change.
|
||||||
|
Please also include relevant motivation and context.
|
||||||
|
-->
|
||||||
|
|
||||||
<!-- Link the issue which will be fixed (if any) here: -->
|
<!-- Link the issue which will be fixed (if any) here: -->
|
||||||
Fixes #
|
Fixes #
|
||||||
|
|
|
@ -368,8 +368,7 @@ In this release the relay-host support saw [significant internal refactoring](ht
|
||||||
|
|
||||||
### Critical Changes
|
### Critical Changes
|
||||||
|
|
||||||
1. This release fixes a critical issue for LDAP users, installing a needed package on Debian 11
|
1. This release fixes a critical issue for LDAP users, installing a needed package on Debian 11 on build-time. Moreover, a race-condition was eliminated ([#2341](https://github.com/docker-mailserver/docker-mailserver/pull/2341)).
|
||||||
on build-time. Moreover, a race-condition was eliminated ([#2341](https://github.com/docker-mailserver/docker-mailserver/pull/2341)).
|
|
||||||
2. A resource leak in `check-for-changes.sh` was fixed ([#2401](https://github.com/docker-mailserver/docker-mailserver/pull/2401))
|
2. A resource leak in `check-for-changes.sh` was fixed ([#2401](https://github.com/docker-mailserver/docker-mailserver/pull/2401))
|
||||||
|
|
||||||
### Other Minor Changes
|
### Other Minor Changes
|
||||||
|
|
|
@ -134,9 +134,7 @@ EOF
|
||||||
|
|
||||||
COPY target/postsrsd/postsrsd /etc/default/postsrsd
|
COPY target/postsrsd/postsrsd /etc/default/postsrsd
|
||||||
COPY target/postgrey/postgrey /etc/default/postgrey
|
COPY target/postgrey/postgrey /etc/default/postgrey
|
||||||
COPY target/postgrey/postgrey.init /etc/init.d/postgrey
|
|
||||||
RUN <<EOF
|
RUN <<EOF
|
||||||
chmod 755 /etc/init.d/postgrey
|
|
||||||
mkdir /var/run/postgrey
|
mkdir /var/run/postgrey
|
||||||
chown postgrey:postgrey /var/run/postgrey
|
chown postgrey:postgrey /var/run/postgrey
|
||||||
curl -Lsfo /etc/postgrey/whitelist_clients https://postgrey.schweikert.ch/pub/postgrey_whitelist_clients
|
curl -Lsfo /etc/postgrey/whitelist_clients https://postgrey.schweikert.ch/pub/postgrey_whitelist_clients
|
||||||
|
|
|
@ -163,6 +163,7 @@ Obtain a Cloudflare API token:
|
||||||
|
|
||||||
- As this is sensitive data, you should restrict access to it with `chmod 600` and `chown 0:0`.
|
- As this is sensitive data, you should restrict access to it with `chmod 600` and `chown 0:0`.
|
||||||
- Store the file in a folder if you like, such as `docker-data/certbot/secrets/`.
|
- Store the file in a folder if you like, such as `docker-data/certbot/secrets/`.
|
||||||
|
|
||||||
5. Your `compose.yaml` should include the following:
|
5. Your `compose.yaml` should include the following:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
|
|
|
@ -100,6 +100,7 @@ rspamd.bats
|
||||||
✓ [Rspamd] normal mail passes fine [44]
|
✓ [Rspamd] normal mail passes fine [44]
|
||||||
✓ [Rspamd] detects and rejects spam [122]
|
✓ [Rspamd] detects and rejects spam [122]
|
||||||
✓ [Rspamd] detects and rejects virus [189]
|
✓ [Rspamd] detects and rejects virus [189]
|
||||||
|
|
||||||
clamav.bats
|
clamav.bats
|
||||||
✓ [ClamAV] log files exist at /var/log/mail directory [68]
|
✓ [ClamAV] log files exist at /var/log/mail directory [68]
|
||||||
✓ [ClamAV] should be identified by Amavis [67]
|
✓ [ClamAV] should be identified by Amavis [67]
|
||||||
|
@ -114,8 +115,10 @@ You're almost finished with your change before submitting it as a PR. It's a goo
|
||||||
$ make clean generate-accounts tests/parallel/set1
|
$ make clean generate-accounts tests/parallel/set1
|
||||||
default_relay_host.bats
|
default_relay_host.bats
|
||||||
✓ [Relay] (ENV) 'DEFAULT_RELAY_HOST' should configure 'main.cf:relayhost' [88]
|
✓ [Relay] (ENV) 'DEFAULT_RELAY_HOST' should configure 'main.cf:relayhost' [88]
|
||||||
|
|
||||||
spam_virus/amavis.bats
|
spam_virus/amavis.bats
|
||||||
✓ [Amavis] SpamAssassin integration should be active [1165]
|
✓ [Amavis] SpamAssassin integration should be active [1165]
|
||||||
|
|
||||||
spam_virus/clamav.bats
|
spam_virus/clamav.bats
|
||||||
✓ [ClamAV] log files exist at /var/log/mail directory [73]
|
✓ [ClamAV] log files exist at /var/log/mail directory [73]
|
||||||
✓ [ClamAV] should be identified by Amavis [67]
|
✓ [ClamAV] should be identified by Amavis [67]
|
||||||
|
@ -127,7 +130,6 @@ Even better, before opening a PR run the full test suite:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ make clean tests
|
$ make clean tests
|
||||||
...
|
|
||||||
```
|
```
|
||||||
|
|
||||||
[BATS]: https://github.com/bats-core/bats-core
|
[BATS]: https://github.com/bats-core/bats-core
|
||||||
|
|
|
@ -512,7 +512,8 @@ if header :contains "X-Spam-Flag" "YES" {
|
||||||
fileinto "Junk";
|
fileinto "Junk";
|
||||||
} elsif allof (
|
} elsif allof (
|
||||||
not header :matches "x-spam-score" "-*",
|
not header :matches "x-spam-score" "-*",
|
||||||
header :value "ge" :comparator "i;ascii-numeric" "x-spam-score" "3.75" ) {
|
header :value "ge" :comparator "i;ascii-numeric" "x-spam-score" "3.75"
|
||||||
|
) {
|
||||||
fileinto "Junk";
|
fileinto "Junk";
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -86,18 +86,18 @@ When it comes to the specifics of email exchange, we have to look at protocols a
|
||||||
The following picture gives a visualization of the interplay of all components and their [respective ports][docs-understandports]:
|
The following picture gives a visualization of the interplay of all components and their [respective ports][docs-understandports]:
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
┏━━━━━━━━━━ Submission ━━━━━━━━━━━━┓┏━━━━━━━━━━━━━ Transfer/Relay ━━━━━━━━━━━┓
|
┏━━━━━━━━━━ Submission ━━━━━━━━━━━━━┓┏━━━━━━━━━━━━━ Transfer/Relay ━━━━━━━━━━━┓
|
||||||
|
|
||||||
┌─────────────────────┐ ┌┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐
|
┌─────────────────────┐ ┌┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐
|
||||||
MUA ----- STARTTLS ------> ┤(587) MTA ╮ (25)├ <-- cleartext ---> ┊ Third-party MTA ┊
|
MUA ----- STARTTLS -------> ┤(587) MTA ╮ (25)├ <-- cleartext ---> ┊ Third-party MTA ┊
|
||||||
----- implicit TLS --> ┤(465) │ | └┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┘
|
----- implicit TLS ---> ┤(465) │ | └┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┘
|
||||||
----- cleartext -----> ┤(25) │ |
|
----- cleartext ------> ┤(25) │ |
|
||||||
|┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄|
|
|┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄|
|
||||||
MUA <---- STARTTLS ------- ┤(143) MDA ╯ |
|
MUA <---- STARTTLS -------- ┤(143) MDA ╯ |
|
||||||
<---- implicit TLS --- ┤(993) |
|
<---- implicit TLS ---- ┤(993) |
|
||||||
└─────────────────────┘
|
└─────────────────────┘
|
||||||
|
|
||||||
┗━━━━━━━━━━ Retrieval ━━━━━━━━━━━━━┛
|
┗━━━━━━━━━━ Retrieval ━━━━━━━━━━━━━━┛
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're new to email infrastructure, both that table and the schema may be confusing.
|
If you're new to email infrastructure, both that table and the schema may be confusing.
|
||||||
|
@ -124,7 +124,7 @@ My MTA will thus have to support two kinds of Submission:
|
||||||
- Inbound Submission (third-party email has been submitted & relayed, then is accepted "inside" by the MTA)
|
- Inbound Submission (third-party email has been submitted & relayed, then is accepted "inside" by the MTA)
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
┏━━━━ Outbound Submission ━━━━┓
|
┏━━━ Outbound Submission ━━━┓
|
||||||
|
|
||||||
┌────────────────────┐ ┌┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐
|
┌────────────────────┐ ┌┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐
|
||||||
Me ---------------> ┤ ├ -----------------> ┊ ┊
|
Me ---------------> ┤ ├ -----------------> ┊ ┊
|
||||||
|
@ -168,7 +168,7 @@ Granted it's still very difficult enforcing encryption between MTAs (Transfer/Re
|
||||||
Overall, DMS's default configuration for SMTP looks like this:
|
Overall, DMS's default configuration for SMTP looks like this:
|
||||||
|
|
||||||
```txt
|
```txt
|
||||||
┏━━━━ Outbound Submission ━━━━┓
|
┏━━━ Outbound Submission ━━━┓
|
||||||
|
|
||||||
┌────────────────────┐ ┌┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐
|
┌────────────────────┐ ┌┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐
|
||||||
Me -- cleartext --> ┤(25) (25)├ --- cleartext ---> ┊ ┊
|
Me -- cleartext --> ┤(25) (25)├ --- cleartext ---> ┊ ┊
|
||||||
|
|
|
@ -1,154 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
|
|
||||||
# postgrey start/stop the postgrey greylisting deamon for postfix
|
|
||||||
# (priority should be smaller than that of postfix)
|
|
||||||
#
|
|
||||||
# Author: (c)2004-2006 Adrian von Bidder <avbidder@fortytwo.ch>
|
|
||||||
# Based on Debian sarge's 'skeleton' example
|
|
||||||
# Distribute and/or modify at will.
|
|
||||||
#
|
|
||||||
# Version: $Id: postgrey.init 1436 2006-12-07 07:15:03Z avbidder $
|
|
||||||
# altered by Georg Lauterbach as aendeavor 2020-11.05 14:02:00Z
|
|
||||||
|
|
||||||
### BEGIN INIT INFO
|
|
||||||
# Provides: postgrey
|
|
||||||
# Required-Start: $syslog $local_fs $remote_fs
|
|
||||||
# Required-Stop: $syslog $local_fs $remote_fs
|
|
||||||
# Default-Start: 2 3 4 5
|
|
||||||
# Default-Stop: 0 1 6
|
|
||||||
# Short-Description: Start/stop the postgrey daemon
|
|
||||||
### END INIT INFO
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
PATH='/sbin:/bin:/usr/sbin:/usr/bin'
|
|
||||||
DAEMON='/usr/sbin/postgrey'
|
|
||||||
DAEMON_NAME='postgrey'
|
|
||||||
DESC='postfix greylisting daemon'
|
|
||||||
DAEMON_USER='postgrey'
|
|
||||||
|
|
||||||
PIDFILE="/var/run/${DAEMON_NAME}/${DAEMON_NAME}.pid"
|
|
||||||
SCRIPTNAME="/etc/init.d/${DAEMON_NAME}"
|
|
||||||
|
|
||||||
# gracefully exit if the package has been removed.
|
|
||||||
[ -x "${DAEMON}" ] || exit 0
|
|
||||||
|
|
||||||
# shellcheck source=/dev/null
|
|
||||||
. /lib/lsb/init-functions
|
|
||||||
|
|
||||||
# Read config file if it is present.
|
|
||||||
# shellcheck source=/dev/null
|
|
||||||
[ -r "/etc/default/${DAEMON_NAME}" ] && . "/etc/default/${DAEMON_NAME}"
|
|
||||||
|
|
||||||
POSTGREY_OPTS="--pidfile=${PIDFILE} --daemonize ${POSTGREY_OPTS}"
|
|
||||||
|
|
||||||
if [ -z "${POSTGREY_TEXT}" ]; then
|
|
||||||
POSTGREY_TEXT_OPT=""
|
|
||||||
else
|
|
||||||
POSTGREY_TEXT_OPT="--greylist-text=${POSTGREY_TEXT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ret=0
|
|
||||||
|
|
||||||
do_start()
|
|
||||||
{
|
|
||||||
# Return
|
|
||||||
# 0 if daemon has been started
|
|
||||||
# 1 if daemon was already running
|
|
||||||
# 2 if daemon could not be started
|
|
||||||
start-stop-daemon --start --quiet --pidfile \
|
|
||||||
"${PIDFILE}" --exec "${DAEMON}" --test >/dev/null || return 1
|
|
||||||
|
|
||||||
start-stop-daemon --start --quiet --pidfile \
|
|
||||||
"${PIDFILE}" --exec "${DAEMON}" -- "${POSTGREY_OPTS}" \
|
|
||||||
"${POSTGREY_TEXT_OPT}" || return 2
|
|
||||||
}
|
|
||||||
|
|
||||||
do_stop()
|
|
||||||
{
|
|
||||||
# Return
|
|
||||||
# 0 if daemon has been stopped
|
|
||||||
# 1 if daemon was already stopped
|
|
||||||
# 2 if daemon could not be stopped
|
|
||||||
# other if a failure occurred
|
|
||||||
start-stop-daemon --user "${DAEMON_USER}" --stop --quiet \
|
|
||||||
--retry=TERM/30/KILL/5 --pidfile "${PIDFILE}"
|
|
||||||
|
|
||||||
RETVAL="$?"
|
|
||||||
[ "${RETVAL}" -eq 2 ] && return 2
|
|
||||||
|
|
||||||
# Wait for children to finish too if this is a daemon that forks
|
|
||||||
# and if the daemon is only ever run from this initscript.
|
|
||||||
# If the above conditions are not satisfied then add some other code
|
|
||||||
# that waits for the process to drop all resources that could be
|
|
||||||
# needed by services started subsequently. A last resort is to
|
|
||||||
# sleep for some time.
|
|
||||||
start-stop-daemon --user "${DAEMON_USER}" --stop --quiet \
|
|
||||||
--oknodo --retry=0/30/KILL/5 --exec "${DAEMON}"
|
|
||||||
[ "$?" -eq 2 ] && return 2
|
|
||||||
|
|
||||||
# Many daemons don't delete their pidfiles when they exit.
|
|
||||||
rm -f "${PIDFILE}"
|
|
||||||
return "${RETVAL}"
|
|
||||||
}
|
|
||||||
|
|
||||||
do_reload()
|
|
||||||
{
|
|
||||||
#
|
|
||||||
# If the daemon can reload its configuration without
|
|
||||||
# restarting (for example, when it is sent a SIGHUP),
|
|
||||||
# then implement that here.
|
|
||||||
#
|
|
||||||
start-stop-daemon --stop --signal 1 --quiet --pidfile "${PIDFILE}"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
case "${1}" in
|
|
||||||
start )
|
|
||||||
[ "${VERBOSE}" != no ] && log_daemon_msg "Starting ${DESC}" "${DAEMON_NAME}"
|
|
||||||
do_start
|
|
||||||
|
|
||||||
case "${?}" in
|
|
||||||
0|1) [ "${VERBOSE}" != no ] && log_end_msg 0 ;;
|
|
||||||
2) [ "${VERBOSE}" != no ] && log_end_msg 1 ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
|
|
||||||
stop )
|
|
||||||
[ "${VERBOSE}" != no ] && log_daemon_msg "Stopping ${DESC}" "${DAEMON_NAME}"
|
|
||||||
do_stop
|
|
||||||
|
|
||||||
case "${?}" in
|
|
||||||
0|1) [ "${VERBOSE}" != no ] && log_end_msg 0 ;;
|
|
||||||
2) [ "${VERBOSE}" != no ] && log_end_msg 1 ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
|
|
||||||
reload|force-reload)
|
|
||||||
[ "${VERBOSE}" != no ] && log_daemon_msg "Reloading ${DESC}" "${DAEMON_NAME}"
|
|
||||||
do_reload
|
|
||||||
|
|
||||||
case "${?}" in
|
|
||||||
0|1) [ "${VERBOSE}" != no ] && log_end_msg 0 ;;
|
|
||||||
2) [ "${VERBOSE}" != no ] && log_end_msg 1 ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
|
|
||||||
restart )
|
|
||||||
do_stop
|
|
||||||
do_start
|
|
||||||
;;
|
|
||||||
|
|
||||||
status )
|
|
||||||
status_of_proc -p "${PIDFILE}" "${DAEMON}" "${DAEMON_NAME}" 2>/dev/null
|
|
||||||
ret=${?}
|
|
||||||
;;
|
|
||||||
|
|
||||||
* )
|
|
||||||
echo "Usage: ${SCRIPTNAME} {start|stop|restart|reload|force-reload|status}" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit ${ret}
|
|
||||||
|
|
|
@ -3,4 +3,3 @@
|
||||||
# this is also a test comment, :O
|
# this is also a test comment, :O
|
||||||
/^bounce.*@.*/ external1@otherdomain.tld
|
/^bounce.*@.*/ external1@otherdomain.tld
|
||||||
/^postmaster@/ user1@localhost.localdomain
|
/^postmaster@/ user1@localhost.localdomain
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,9 @@
|
||||||
{
|
{
|
||||||
"Verbose": false,
|
|
||||||
"Debug": false,
|
|
||||||
"IgnoreDefaults": false,
|
"IgnoreDefaults": false,
|
||||||
"SpacesAftertabs": true,
|
|
||||||
"NoColor": false,
|
|
||||||
"Exclude": [
|
"Exclude": [
|
||||||
"^test/",
|
"^test/bats/",
|
||||||
"\\.git.*",
|
"^test/test_helper/bats-(assert|support)",
|
||||||
"\\.cf$",
|
"^test/test-files/",
|
||||||
"\\.conf$",
|
"\\.git/"
|
||||||
"\\.init$",
|
]
|
||||||
"\\.md$"
|
|
||||||
],
|
|
||||||
"AllowedContentTypes": [],
|
|
||||||
"PassedFiles": [],
|
|
||||||
"Disable": {
|
|
||||||
"EndOfLine": false,
|
|
||||||
"Indentation": false,
|
|
||||||
"InsertFinalNewline": false,
|
|
||||||
"TrimTrailingWhitespace": false,
|
|
||||||
"IndentSize": false,
|
|
||||||
"MaxLineLength": false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue