#!/bin/bash set -euo pipefail MAIL="$(cat -)" MAILGROUP=cropswap@shandan.one declare -A SUBSCRIBED declare -a actions update(){ da="${actions[$1-1]:0:1}" db="${2:0:1}" alias="${actions[$1-1]#?}" email="${2#?}" [ "$da" == "$db" ] || exit 1 # corrupt list if [ "$da" == "+" ]; then SUBSCRIBED["$email"]="$alias" else SUBSCRIBED["$email"]="" fi } exec 4<> "${SLIST}.txt" flock 4 mapfile -t -c 2 -C update -u 4 actions for email in "${!SUBSCRIBED[@]}"; do if [ -z "${SUBSCRIBED["$email"]}" ]; then continue fi echo "+${SUBSCRIBED["$email"]}" echo "+$email" done > "${SLIST}".txt flock -u 4 for email in "${!SUBSCRIBED[@]}"; do if [ -z "${SUBSCRIBED["$email"]}" ] || [ "${email,,}" == "${NOFORWARD,,}" ]; then continue fi echo "Forwarding mail to: ${SUBSCRIBED["$email"]} <${email}>" formail -kb \ -X "MIME-Version:" \ -X "Content-Type:" \ -X "Subject:" \ -X "Date:" \ <<<"${MAIL}" | /usr/sbin/sendmail \ -F "${FROM}" \ -f "${MAILGROUP}" "${SUBSCRIBED["$email"]} <${email}>" done #TODO: report errors properly