summaryrefslogtreecommitdiffstats
path: root/postfix/entrypoint.sh
diff options
context:
space:
mode:
authorMalfurious <m@lfurio.us>2024-06-15 17:43:00 -0400
committerMalfurious <m@lfurio.us>2024-06-15 17:43:00 -0400
commit2e2e06f47683d484e4852c2978fd787660ad730e (patch)
treeb1f25e6b9fe681144c82b361527965a535a535d6 /postfix/entrypoint.sh
parent2ee344e9c7ab8182efde6a18e50d4b4e7d148e71 (diff)
parent57d0c93851d72789c2adda1ed1e8b671bcd3f884 (diff)
downloadmailnode-2e2e06f47683d484e4852c2978fd787660ad730e.tar.gz
mailnode-2e2e06f47683d484e4852c2978fd787660ad730e.zip
Merge branch 'mailing-lists'
* mailing-lists: mlmmj: Add maintenance service mlmmj: Don't mention FAQ address mlmmj: Use simpler message prologue mlmmj: Add user configuration directories mlmmj: Integration with postfix mlmmj: Setup mailing list package
Diffstat (limited to 'postfix/entrypoint.sh')
-rwxr-xr-xpostfix/entrypoint.sh45
1 files changed, 37 insertions, 8 deletions
diff --git a/postfix/entrypoint.sh b/postfix/entrypoint.sh
index 46c06ab..afea241 100755
--- a/postfix/entrypoint.sh
+++ b/postfix/entrypoint.sh
@@ -1,18 +1,47 @@
#!/bin/sh
-# Generate virtual mappings from user password file
+users() {
+ sed 's/:.*$//g' /etc/userconfig/passwd
+}
+
+## Generate virtual mappings from user password file
# Incoming mail: "user@domain domain/user/" >vmailbox
-# (The trailing slash indicates the directory is a maildir.)
-sed 's/:.*$//g' </etc/userconfig/passwd \
- | awk -F '@' '{printf "%s %s/%s/\n", $0, $2, $1}' >/etc/postfix/vmailbox
+# Outgoing mail: "user@domain user@domain" >vaddress
+users | awk -F '@' '{printf "%s %s/%s/\n", $0, $2, $1}' >/etc/postfix/vmailbox
+users | awk '{printf "%s %s\n", $0, $0}' >/etc/postfix/vaddress
+
+## Synchronize mailing list configuration directories
+eul=$(ls /etc/userconfig/lists | sed '/ /d') # Ignore spaces and dotfiles
+vsl=$(ls -A /var/spool/mlmmj)
+added=$(printf '%s\n' "$vsl" "$vsl" "$eul" | sort | uniq -u)
+removed=$(printf '%s\n' "$eul" "$eul" "$vsl" | sort | uniq -u)
+
+for list in $added; do
+ sudo -u mlmmj /etc/postfix/make_list.sh "$list"
+done
+for list in $removed; do
+ listdir="/var/spool/mlmmj/$list"
+ rm -rf "$listdir"
+ printf 'Deleted list directory: %s\n' "$listdir"
+done
-# Outgoing mail: "user@domain user@domain" >vaddress
-sed 's/:.*$//g' </etc/userconfig/passwd \
- | awk '{printf "%s %s\n", $0, $0}' >/etc/postfix/vaddress
+## Generate virtual mappings from mailing list addresses
+# "address@domain list@localhost.mlmmj" >mlvirtual
+# "list@localhost.mlmmj mlmmj:list" >mltransport
+touch /etc/postfix/mlvirtual
+touch /etc/postfix/mltransport
+for list in $(ls -A /var/spool/mlmmj); do
+ address="/var/spool/mlmmj/$list/control/listaddress" # there could be multiple
+ sed "s/$/ $list@localhost.mlmmj/g" <$address >>/etc/postfix/mlvirtual
+ echo "$list@localhost.mlmmj mlmmj:$list" >>/etc/postfix/mltransport
+done
-# Generate Berkeley DB files
+## Generate Berkeley DB files
+postmap /etc/postfix/mltransport
+postmap /etc/postfix/mlvirtual
postmap /etc/postfix/vaddress
postmap /etc/postfix/vmailbox
postmap /etc/userconfig/aliases
+## Execute postfix daemons
exec /usr/sbin/postfix start-fg