entrypoint: no link followed at the DMARC maps (audit I2)
Security audit 2026-10-17, finding I2 (= M4), stage 0. drop_links listed the outbound maps, sasldb2, the key tree and mail.log but not the three DMARC maps that postfix-config.sh creates as root with `[ -e ] || : >` when DMARC_REPORTS_ENABLE=true; -e is false for a dangling link and the redirect follows it, and /data/postfix is the panel's. Now the three are in drop_links, and both map loops refuse to create through a link (`[ -e ] || [ -L ] || : >`). e2e: TestStartsOnA28Data plants a dangling /data/postfix/dmarc_transport with DMARC reports on and expects the "removing the symbolic link" line, no file at the link's target, and a regular map. To be run on the server with the stage. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -534,8 +534,12 @@ if [ "${INBOUND_RELAY_ENABLE}" = "true" ] || [ "${DMARC_REPORTS_ENABLE}" = "true
|
||||
TRANSPORT_SETTING=""
|
||||
RECIPIENT_RESTRICTIONS="reject"
|
||||
if [ "${INBOUND_RELAY_ENABLE}" = "true" ]; then
|
||||
# [ -e ] is false for a dangling link and the redirect would follow
|
||||
# it: the entrypoint's drop_links removes links at these paths, and
|
||||
# this refuses to create through one all the same (audit 2026-10-17,
|
||||
# I2).
|
||||
for f in "$RELAY_DOMAINS_MAP" "$TRANSPORT_MAP" "$RELAY_RECIPIENTS_MAP" "$TLS_POLICY_MAP"; do
|
||||
[ -e "$f" ] || : > "$f"
|
||||
[ -e "$f" ] || [ -L "$f" ] || : > "$f"
|
||||
done
|
||||
RELAY_DOMAINS_SETTING="texthash:${RELAY_DOMAINS_MAP}"
|
||||
TRANSPORT_SETTING="texthash:${TRANSPORT_MAP}"
|
||||
@@ -543,7 +547,7 @@ if [ "${INBOUND_RELAY_ENABLE}" = "true" ] || [ "${DMARC_REPORTS_ENABLE}" = "true
|
||||
fi
|
||||
if [ "${DMARC_REPORTS_ENABLE}" = "true" ]; then
|
||||
for f in "$DMARC_RECIPIENTS_MAP" "$DMARC_TRANSPORT_MAP" "$DMARC_RELAY_DOMAINS_MAP"; do
|
||||
[ -e "$f" ] || : > "$f"
|
||||
[ -e "$f" ] || [ -L "$f" ] || : > "$f"
|
||||
done
|
||||
ln -sf /usr/local/bin/panel /usr/local/bin/dmarc-ingest
|
||||
# flags=, user= and argv= are arguments of pipe(8), not -o parameters:
|
||||
|
||||
Reference in New Issue
Block a user