diff --git a/sympa/recipe/sympa_fix_personalization.recipe b/sympa/recipe/sympa_fix_personalization.recipe index 0fe4278..1caed03 100644 --- a/sympa/recipe/sympa_fix_personalization.recipe +++ b/sympa/recipe/sympa_fix_personalization.recipe @@ -3,6 +3,7 @@ # CONSTANTS GLOBAL_CONF=/etc/sympa/sympa/sympa.conf +MESSAGE_PM=/usr/share/sympa/lib/Sympa/Message.pm LIST_DATA_DIR=/var/lib/sympa/list_data FOUND=false @@ -19,6 +20,38 @@ function fix_personalization { fi } +function patch_message_pm { + if [[ -f $MESSAGE_PM ]]; then + if grep -q '^.*qw/subject x-originating-ip message-id date x-original-to x-original-from.*$' "$MESSAGE_PM"; then + /opt/miaou-bash/tools/append_or_replace '^.*qw/subject x-originating-ip message-id date x-original-to.*$' ' qw/subject x-originating-ip message-id date x-original-to x-original-from from to thread-topic content-type/' "$MESSAGE_PM" + FOUND=true + else + echo 'already patched!' + fi + message=$(prepend_2lines_of_text_before_existing_line "$MESSAGE_PM" '$data->{sender} = $self->{sender};' '$data->{gecos} = $self->{gecos};' '$data->{subject} = $self->{decoded_subject};') + [[ $message =~ 'do prepend']] && FOUND=true || true + else + echo "file: $MESSAGE_PM not found!" && exit 11 + fi +} + +## arg1=file, arg2=text, arg3='existing_line' +function prepend_2lines_of_text_before_existing_line { + local file="$1" + local line1="$2" + local line2="$3" + local existing="$4" + + [[ ! -f $file ]] && echo "file: $file not found!" && exit 20 + + if ! grep "^$existing$" $file -B2 | grep -qz "$line1.*$line2.*$existing"; then + echo 'do prepend' + sed -i "/^$existing$/s/^/$line1\n$line2\n/" $file + else + echo 'already done!' + fi +} + function restart_services { $FOUND && systemctl restart sympa wwsympa.socket || true } @@ -26,5 +59,6 @@ function restart_services { # MAIN set -Eue +patch_message_pm fix_personalization restart_services