#!/usr/bin/perl

use strict;
use warnings;

#my $force = @ARGV && $ARGV[0] eq '--force' ? 1 : 0;

#exit if (! $force && -e '/var/cpanel/version/vfilter');

my @vfilters;

if ( opendir my $vfilters_dh, '/etc/vfilters' ) {
    @vfilters = grep { !/^[.]/ } readdir $vfilters_dh;
    closedir $vfilters_dh;
}

VFILTERLOOP:
foreach my $file (@vfilters) {
    if ( open my $vfilter_fh, '<', '/etc/vfilters/' . $file ) {
        my $updated = 0;
        my @vfilterlines;
      LINELOOP:
        while ( my $line = readline $vfilter_fh ) {
            if ( $line =~ m{ \A if \s+ error_message \s+ then \s+ finish \s+ endif }xms ) {
                push @vfilterlines, "if not first_delivery and error_message then finish endif\n";
                $updated = 1;
                next LINELOOP;
            }
            else {
                push @vfilterlines, $line;
            }
        }
        close $vfilter_fh;
        if ( $updated && open my $vfilter_fh, '>', '/etc/vfilters/' . $file ) {
            foreach my $line (@vfilterlines) {
                print {$vfilter_fh} $line;
            }
            close $vfilter_fh;
            print "Updated /etc/vfilters/$file\n";
        }
        else {
            if ( !$updated ) {
                print "Already up to date: /etc/vfilters/$file\n";
                next VFILTERLOOP;
            }
            warn "Unable to write new vfilter file: $!";
        }
    }
    else {
        warn "Unable to read /etc/vfilters/$file: $!";
    }
}

#if (open my $vfilterfixed_fh, '>', '/var/cpanel/version/vfilter') {
#    close $vfilterfixed_fh;
#} else {
#    warn "Unable to write vfilter status file: $!";
#}
