Skip to content

Commit c3c6836

Browse files
Merge pull request #6391 from mailcow/staging
Update 2025-03
2 parents a632980 + d584dd3 commit c3c6836

File tree

804 files changed

+49071
-9606
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

804 files changed

+49071
-9606
lines changed

.github/workflows/rebuild_backup_image.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
password: ${{ secrets.GITHUB_TOKEN }}
3131

3232
- name: Build and push
33-
uses: docker/build-push-action@v5
33+
uses: docker/build-push-action@v6
3434
with:
3535
context: .
3636
platforms: linux/amd64,linux/arm64

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ data/conf/rspamd/local.d/*
4545
data/conf/rspamd/override.d/*
4646
data/conf/sogo/custom-theme.js
4747
data/conf/sogo/plist_ldap
48+
data/conf/sogo/plist_ldap.sh
4849
data/conf/sogo/sieve.creds
4950
data/conf/sogo/cron.creds
5051
data/conf/sogo/custom-fulllogo.svg
@@ -73,3 +74,4 @@ rebuild-images.sh
7374
refresh_images.sh
7475
update_diffs/
7576
create_cold_standby.sh
77+
!data/conf/nginx/mailcow_auth.conf

data/Dockerfiles/acme/Dockerfile

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
FROM alpine:3.20
1+
FROM alpine:3.21
22

33
LABEL maintainer = "The Infrastructure Company GmbH <[email protected]>"
44

5-
65
RUN apk upgrade --no-cache \
76
&& apk add --update --no-cache \
87
bash \
@@ -15,7 +14,7 @@ RUN apk upgrade --no-cache \
1514
tini \
1615
tzdata \
1716
python3 \
18-
acme-tiny --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/
17+
acme-tiny
1918

2019
COPY acme.sh /srv/acme.sh
2120
COPY functions.sh /srv/functions.sh

data/Dockerfiles/acme/acme.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ log_f "Resolver OK"
138138
log_f "Waiting for domain table..."
139139
while [[ -z ${DOMAIN_TABLE} ]]; do
140140
curl --silent http://nginx.${COMPOSE_PROJECT_NAME}_mailcow-network/ >/dev/null 2>&1
141-
DOMAIN_TABLE=$(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SHOW TABLES LIKE 'domain'" -Bs)
141+
DOMAIN_TABLE=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SHOW TABLES LIKE 'domain'" -Bs)
142142
[[ -z ${DOMAIN_TABLE} ]] && sleep 10
143143
done
144144
log_f "OK" no_date
@@ -231,7 +231,7 @@ while true; do
231231

232232
#########################################
233233
# IP and webroot challenge verification #
234-
SQL_DOMAINS=$(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain WHERE backupmx=0 and active=1" -Bs)
234+
SQL_DOMAINS=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain WHERE backupmx=0 and active=1" -Bs)
235235
if [[ ! $? -eq 0 ]]; then
236236
log_f "Failed to read SQL domains, retrying in 1 minute..."
237237
sleep 1m

data/Dockerfiles/clamd/clamdcheck.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@ if [ "${CLAMAV_NO_CLAMD:-}" != "false" ]; then
1111
echo "Clamd is up"
1212
fi
1313

14-
exit 0
14+
exit 0

data/Dockerfiles/dockerapi/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:3.20
1+
FROM alpine:3.21
22

33
LABEL maintainer = "The Infrastructure Company GmbH <[email protected]>"
44

data/Dockerfiles/dovecot/Dockerfile

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:3.20
1+
FROM alpine:3.21
22

33
LABEL maintainer="The Infrastructure Company GmbH <[email protected]>"
44

@@ -34,9 +34,13 @@ RUN addgroup -g 5000 vmail \
3434
lua5.3-sql-mysql \
3535
icu-data-full \
3636
mariadb-connector-c \
37+
lua-sec \
38+
mariadb-dev \
39+
glib-dev \
3740
gcompat \
3841
mariadb-client \
3942
perl \
43+
perl-dev \
4044
perl-ntlm \
4145
perl-cgi \
4246
perl-crypt-openssl-rsa \
@@ -65,7 +69,7 @@ RUN addgroup -g 5000 vmail \
6569
perl-par-packer \
6670
perl-parse-recdescent \
6771
perl-lockfile-simple \
68-
libproc \
72+
libproc2 \
6973
perl-readonly \
7074
perl-regexp-common \
7175
perl-sys-meminfo \

data/Dockerfiles/dovecot/clean_q_aged.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ if ! [[ ${MAX_AGE} =~ ${NUM_REGEXP} ]] ; then
1515
exit 1
1616
fi
1717

18-
TO_DELETE=$(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT COUNT(id) FROM quarantine WHERE created < NOW() - INTERVAL ${MAX_AGE//[!0-9]/} DAY" -BN)
19-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM quarantine WHERE created < NOW() - INTERVAL ${MAX_AGE//[!0-9]/} DAY"
18+
TO_DELETE=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT COUNT(id) FROM quarantine WHERE created < NOW() - INTERVAL ${MAX_AGE//[!0-9]/} DAY" -BN)
19+
mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "DELETE FROM quarantine WHERE created < NOW() - INTERVAL ${MAX_AGE//[!0-9]/} DAY"
2020
echo "Deleted ${TO_DELETE} items from quarantine table (max age is ${MAX_AGE//[!0-9]/} days)"

data/Dockerfiles/dovecot/docker-entrypoint.sh

+9-126
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ ${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH 1 > /dev/null
2828

2929
# Create missing directories
3030
[[ ! -d /etc/dovecot/sql/ ]] && mkdir -p /etc/dovecot/sql/
31-
[[ ! -d /etc/dovecot/lua/ ]] && mkdir -p /etc/dovecot/lua/
31+
[[ ! -d /etc/dovecot/auth/ ]] && mkdir -p /etc/dovecot/auth/
3232
[[ ! -d /etc/dovecot/conf.d/ ]] && mkdir -p /etc/dovecot/conf.d/
3333
[[ ! -d /var/vmail/_garbage ]] && mkdir -p /var/vmail/_garbage
3434
[[ ! -d /var/vmail/sieve ]] && mkdir -p /var/vmail/sieve
@@ -131,123 +131,6 @@ user_query = SELECT CONCAT(JSON_UNQUOTE(JSON_VALUE(attributes, '$.mailbox_format
131131
iterate_query = SELECT username FROM mailbox WHERE active = '1' OR active = '2';
132132
EOF
133133

134-
cat <<EOF > /etc/dovecot/lua/passwd-verify.lua
135-
function auth_password_verify(req, pass)
136-
137-
if req.domain == nil then
138-
return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, "No such user"
139-
end
140-
141-
if cur == nil then
142-
script_init()
143-
end
144-
145-
if req.user == nil then
146-
req.user = ''
147-
end
148-
149-
respbody = {}
150-
151-
-- check against mailbox passwds
152-
local cur,errorString = con:execute(string.format([[SELECT password FROM mailbox
153-
WHERE username = '%s'
154-
AND active = '1'
155-
AND domain IN (SELECT domain FROM domain WHERE domain='%s' AND active='1')
156-
AND IFNULL(JSON_UNQUOTE(JSON_VALUE(mailbox.attributes, '$.force_pw_update')), 0) != '1'
157-
AND IFNULL(JSON_UNQUOTE(JSON_VALUE(attributes, '$.%s_access')), 1) = '1']], con:escape(req.user), con:escape(req.domain), con:escape(req.service)))
158-
local row = cur:fetch ({}, "a")
159-
while row do
160-
if req.password_verify(req, row.password, pass) == 1 then
161-
con:execute(string.format([[REPLACE INTO sasl_log (service, app_password, username, real_rip)
162-
VALUES ("%s", 0, "%s", "%s")]], con:escape(req.service), con:escape(req.user), con:escape(req.real_rip)))
163-
cur:close()
164-
con:close()
165-
return dovecot.auth.PASSDB_RESULT_OK, ""
166-
end
167-
row = cur:fetch (row, "a")
168-
end
169-
170-
-- check against app passwds for imap and smtp
171-
-- app passwords are only available for imap, smtp, sieve and pop3 when using sasl
172-
if req.service == "smtp" or req.service == "imap" or req.service == "sieve" or req.service == "pop3" then
173-
local cur,errorString = con:execute(string.format([[SELECT app_passwd.id, %s_access AS has_prot_access, app_passwd.password FROM app_passwd
174-
INNER JOIN mailbox ON mailbox.username = app_passwd.mailbox
175-
WHERE mailbox = '%s'
176-
AND app_passwd.active = '1'
177-
AND mailbox.active = '1'
178-
AND app_passwd.domain IN (SELECT domain FROM domain WHERE domain='%s' AND active='1')]], con:escape(req.service), con:escape(req.user), con:escape(req.domain)))
179-
local row = cur:fetch ({}, "a")
180-
while row do
181-
if req.password_verify(req, row.password, pass) == 1 then
182-
-- if password is valid and protocol access is 1 OR real_rip matches SOGo, proceed
183-
if tostring(req.real_rip) == "__IPV4_SOGO__" then
184-
cur:close()
185-
con:close()
186-
return dovecot.auth.PASSDB_RESULT_OK, ""
187-
elseif row.has_prot_access == "1" then
188-
con:execute(string.format([[REPLACE INTO sasl_log (service, app_password, username, real_rip)
189-
VALUES ("%s", %d, "%s", "%s")]], con:escape(req.service), row.id, con:escape(req.user), con:escape(req.real_rip)))
190-
cur:close()
191-
con:close()
192-
return dovecot.auth.PASSDB_RESULT_OK, ""
193-
end
194-
end
195-
row = cur:fetch (row, "a")
196-
end
197-
end
198-
199-
cur:close()
200-
con:close()
201-
202-
return dovecot.auth.PASSDB_RESULT_PASSWORD_MISMATCH, "Failed to authenticate"
203-
204-
-- PoC
205-
-- local reqbody = string.format([[{
206-
-- "success":0,
207-
-- "service":"%s",
208-
-- "app_password":false,
209-
-- "username":"%s",
210-
-- "real_rip":"%s"
211-
-- }]], con:escape(req.service), con:escape(req.user), con:escape(req.real_rip))
212-
-- http.request {
213-
-- method = "POST",
214-
-- url = "http://nginx:8081/sasl_log.php",
215-
-- source = ltn12.source.string(reqbody),
216-
-- headers = {
217-
-- ["content-type"] = "application/json",
218-
-- ["content-length"] = tostring(#reqbody)
219-
-- },
220-
-- sink = ltn12.sink.table(respbody)
221-
-- }
222-
223-
end
224-
225-
function auth_passdb_lookup(req)
226-
return dovecot.auth.PASSDB_RESULT_USER_UNKNOWN, ""
227-
end
228-
229-
function script_init()
230-
mysql = require "luasql.mysql"
231-
http = require "socket.http"
232-
http.TIMEOUT = 5
233-
ltn12 = require "ltn12"
234-
env = mysql.mysql()
235-
con = env:connect("__DBNAME__","__DBUSER__","__DBPASS__","localhost")
236-
return 0
237-
end
238-
239-
function script_deinit()
240-
con:close()
241-
env:close()
242-
end
243-
EOF
244-
245-
# Replace patterns in app-passdb.lua
246-
sed -i "s/__DBUSER__/${DBUSER}/g" /etc/dovecot/lua/passwd-verify.lua
247-
sed -i "s/__DBPASS__/${DBPASS}/g" /etc/dovecot/lua/passwd-verify.lua
248-
sed -i "s/__DBNAME__/${DBNAME}/g" /etc/dovecot/lua/passwd-verify.lua
249-
sed -i "s/__IPV4_SOGO__/${IPV4_NETWORK}.248/g" /etc/dovecot/lua/passwd-verify.lua
250-
251134

252135
# Migrate old sieve_after file
253136
[[ -f /etc/dovecot/sieve_after ]] && mv /etc/dovecot/sieve_after /etc/dovecot/global_sieve_after
@@ -385,8 +268,8 @@ sievec /usr/lib/dovecot/sieve/report-ham.sieve
385268

386269
# Fix permissions
387270
chown root:root /etc/dovecot/sql/*.conf
388-
chown root:dovecot /etc/dovecot/sql/dovecot-dict-sql-sieve* /etc/dovecot/sql/dovecot-dict-sql-quota* /etc/dovecot/lua/passwd-verify.lua
389-
chmod 640 /etc/dovecot/sql/*.conf /etc/dovecot/lua/passwd-verify.lua
271+
chown root:dovecot /etc/dovecot/sql/dovecot-dict-sql-sieve* /etc/dovecot/sql/dovecot-dict-sql-quota* /etc/dovecot/auth/passwd-verify.lua
272+
chmod 640 /etc/dovecot/sql/*.conf /etc/dovecot/auth/passwd-verify.lua
390273
chown -R vmail:vmail /var/vmail/sieve
391274
chown -R vmail:vmail /var/volatile
392275
chown -R vmail:vmail /var/vmail_index
@@ -414,15 +297,15 @@ printenv | sed 's/^\(.*\)$/export \1/g' > /source_env.sh
414297

415298
# Clean stopped imapsync jobs
416299
rm -f /tmp/imapsync_busy.lock
417-
IMAPSYNC_TABLE=$(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SHOW TABLES LIKE 'imapsync'" -Bs)
418-
[[ ! -z ${IMAPSYNC_TABLE} ]] && mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "UPDATE imapsync SET is_running='0'"
300+
IMAPSYNC_TABLE=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SHOW TABLES LIKE 'imapsync'" -Bs)
301+
[[ ! -z ${IMAPSYNC_TABLE} ]] && mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "UPDATE imapsync SET is_running='0'"
419302

420303
# Envsubst maildir_gc
421304
echo "$(envsubst < /usr/local/bin/maildir_gc.sh)" > /usr/local/bin/maildir_gc.sh
422305

423306
# GUID generation
424307
while [[ ${VERSIONS_OK} != 'OK' ]]; do
425-
if [[ ! -z $(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -B -e "SELECT 'OK' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = \"${DBNAME}\" AND TABLE_NAME = 'versions'") ]]; then
308+
if [[ ! -z $(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -B -e "SELECT 'OK' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = \"${DBNAME}\" AND TABLE_NAME = 'versions'") ]]; then
426309
VERSIONS_OK=OK
427310
else
428311
echo "Waiting for versions table to be created..."
@@ -433,11 +316,11 @@ PUBKEY_MCRYPT=$(doveconf -P 2> /dev/null | grep -i mail_crypt_global_public_key
433316
if [ -f ${PUBKEY_MCRYPT} ]; then
434317
GUID=$(cat <(echo ${MAILCOW_HOSTNAME}) /mail_crypt/ecpubkey.pem | sha256sum | cut -d ' ' -f1 | tr -cd "[a-fA-F0-9.:/] ")
435318
if [ ${#GUID} -eq 64 ]; then
436-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
319+
mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
437320
REPLACE INTO versions (application, version) VALUES ("GUID", "${GUID}");
438321
EOF
439322
else
440-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
323+
mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
441324
REPLACE INTO versions (application, version) VALUES ("GUID", "INVALID");
442325
EOF
443326
fi
@@ -456,7 +339,7 @@ done
456339

457340
# For some strange, unknown and stupid reason, Dovecot may run into a race condition, when this file is not touched before it is read by dovecot/auth
458341
# May be related to something inside Docker, I seriously don't know
459-
touch /etc/dovecot/lua/passwd-verify.lua
342+
touch /etc/dovecot/auth/passwd-verify.lua
460343

461344
if [[ ! -z ${REDIS_SLAVEOF_IP} ]]; then
462345
cp /etc/syslog-ng/syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng.conf

data/Dockerfiles/dovecot/trim_logs.sh

+1
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ catch_non_zero "${REDIS_CMDLINE} LTRIM AUTODISCOVER_LOG 0 ${LOG_LINES}"
2323
catch_non_zero "${REDIS_CMDLINE} LTRIM API_LOG 0 ${LOG_LINES}"
2424
catch_non_zero "${REDIS_CMDLINE} LTRIM RL_LOG 0 ${LOG_LINES}"
2525
catch_non_zero "${REDIS_CMDLINE} LTRIM WATCHDOG_LOG 0 ${LOG_LINES}"
26+
catch_non_zero "${REDIS_CMDLINE} LTRIM CRON_LOG 0 ${LOG_LINES}"

data/Dockerfiles/netfilter/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:3.20
1+
FROM alpine:3.21
22

33
LABEL maintainer = "The Infrastructure Company GmbH <[email protected]>"
44

data/Dockerfiles/olefy/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:3.20
1+
FROM alpine:3.21
22

33
LABEL maintainer = "The Infrastructure Company GmbH <[email protected]>"
44

data/Dockerfiles/phpfpm/Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM php:8.2-fpm-alpine3.20
1+
FROM php:8.2-fpm-alpine3.21
22

33
LABEL maintainer = "The Infrastructure Company GmbH <[email protected]>"
44

@@ -13,7 +13,7 @@ ARG MEMCACHED_PECL_VERSION=3.2.0
1313
# renovate: datasource=github-tags depName=phpredis/phpredis versioning=semver-coerced extractVersion=(?<version>.*)$
1414
ARG REDIS_PECL_VERSION=6.1.0
1515
# renovate: datasource=github-tags depName=composer/composer versioning=semver-coerced extractVersion=(?<version>.*)$
16-
ARG COMPOSER_VERSION=2.6.6
16+
ARG COMPOSER_VERSION=2.8.6
1717

1818
RUN apk add -U --no-cache autoconf \
1919
aspell-dev \

data/Dockerfiles/phpfpm/docker-entrypoint.sh

+6-6
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ if [ ${SQL_CHANGED} -eq 1 ]; then
8181
fi
8282

8383
# Check mysql tz import (master and slave)
84-
TZ_CHECK=$(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT CONVERT_TZ('2019-11-02 23:33:00','Europe/Berlin','UTC') AS time;" -BN 2> /dev/null)
84+
TZ_CHECK=$(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT CONVERT_TZ('2019-11-02 23:33:00','Europe/Berlin','UTC') AS time;" -BN 2> /dev/null)
8585
if [[ -z ${TZ_CHECK} ]] || [[ "${TZ_CHECK}" == "NULL" ]]; then
8686
SQL_FULL_TZINFO_IMPORT_RETURN=$(curl --silent --insecure -XPOST https://dockerapi.${COMPOSE_PROJECT_NAME}_mailcow-network/containers/${CONTAINER_ID}/exec -d '{"cmd":"system", "task":"mysql_tzinfo_to_sql"}' --silent -H 'Content-type: application/json')
8787
echo "MySQL mysql_tzinfo_to_sql - debug output:"
@@ -120,11 +120,11 @@ if [[ "${MASTER}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
120120
while read line
121121
do
122122
DOMAIN_ARR+=("$line")
123-
done < <(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain" -Bs)
123+
done < <(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain" -Bs)
124124
while read line
125125
do
126126
DOMAIN_ARR+=("$line")
127-
done < <(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT alias_domain FROM alias_domain" -Bs)
127+
done < <(mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT alias_domain FROM alias_domain" -Bs)
128128

129129
if [[ ! -z ${DOMAIN_ARR} ]]; then
130130
for domain in "${DOMAIN_ARR[@]}"; do
@@ -146,13 +146,13 @@ if [[ "${MASTER}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
146146
VALIDATED_IPS=$(array_by_comma ${VALIDATED_API_ALLOW_FROM_ARR[*]})
147147
if [[ ! -z ${VALIDATED_IPS} ]]; then
148148
if [[ ${API_KEY} != "invalid" ]] && [[ ! -z ${API_KEY} ]]; then
149-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
149+
mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
150150
DELETE FROM api WHERE access = 'rw';
151151
INSERT INTO api (api_key, active, allow_from, access) VALUES ("${API_KEY}", "1", "${VALIDATED_IPS}", "rw");
152152
EOF
153153
fi
154154
if [[ ${API_KEY_READ_ONLY} != "invalid" ]] && [[ ! -z ${API_KEY_READ_ONLY} ]]; then
155-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
155+
mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
156156
DELETE FROM api WHERE access = 'ro';
157157
INSERT INTO api (api_key, active, allow_from, access) VALUES ("${API_KEY_READ_ONLY}", "1", "${VALIDATED_IPS}", "ro");
158158
EOF
@@ -161,7 +161,7 @@ EOF
161161
fi
162162

163163
# Create events (master only, STATUS for event on slave will be SLAVESIDE_DISABLED)
164-
mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
164+
mariadb --skip-ssl --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
165165
DROP EVENT IF EXISTS clean_spamalias;
166166
DELIMITER //
167167
CREATE EVENT clean_spamalias

data/Dockerfiles/rspamd/Dockerfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ FROM debian:bookworm-slim
22
LABEL maintainer="The Infrastructure Company GmbH <[email protected]>"
33

44
ARG DEBIAN_FRONTEND=noninteractive
5-
ARG RSPAMD_VER=rspamd_3.11.0-2~90a175b45
5+
ARG RSPAMD_VER=rspamd_3.11.1-1~ab0b44951
66
ARG CODENAME=bookworm
77
ENV LC_ALL=C
88

9-
RUN apt-get update && apt-get install -y \
9+
RUN apt-get update && apt-get install -y --no-install-recommends \
1010
tzdata \
1111
ca-certificates \
1212
gnupg2 \

data/Dockerfiles/sogo/Dockerfile

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ COPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf
4747
COPY syslog-ng-redis_slave.conf /etc/syslog-ng/syslog-ng-redis_slave.conf
4848
COPY supervisord.conf /etc/supervisor/supervisord.conf
4949
COPY acl.diff /acl.diff
50+
COPY navMailcowBtns.diff /navMailcowBtns.diff
5051
COPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh
5152
COPY docker-entrypoint.sh /
5253

0 commit comments

Comments
 (0)