]> git.proxmox.com Git - pmg-api.git/blobdiff - PMG/Config.pm
actually calculate day when it is given
[pmg-api.git] / PMG / Config.pm
index 6832d75911c884a95b57b0b3ab6488ee839170aa..107cea50d3819bc1e84f4b87b389b433b783a556 100755 (executable)
@@ -92,12 +92,24 @@ sub properties {
            type => 'string',
            pattern => "http://.*",
        },
+       avast => {
+           description => "Use Avast Virus Scanner (/bin/scan). You need to buy and install 'Avast Core Security' before you can enable this feature.",
+           type => 'boolean',
+           default => 0,
+       },
+       clamav => {
+           description => "Use ClamAV Virus Scanner. This is the default virus scanner and is enabled by default.",
+           type => 'boolean',
+           default => 1,
+       },
     };
 }
 
 sub options {
     return {
        advfilter => { optional => 1 },
+       avast => { optional => 1 },
+       clamav => { optional => 1 },
        statlifetime => { optional => 1 },
        dailyreport => { optional => 1 },
        demo => { optional => 1 },
@@ -573,6 +585,12 @@ sub properties {
            description => "Optional list of DNS white/blacklist domains (see postscreen_dnsbl_sites parameter).",
            type => 'string', format => 'dnsbl-entry-list',
        },
+       dnsbl_threshold => {
+           description => "The inclusive lower bound for blocking a remote SMTP client, based on its combined DNSBL score (see postscreen_dnsbl_threshold parameter).",
+           type => 'integer',
+           minimum => 0,
+           default => 1
+       },
     };
 }
 
@@ -605,6 +623,7 @@ sub options {
        message_rate_limit => { optional => 1 },
        verifyreceivers => { optional => 1 },
        dnsbl_sites => { optional => 1 },
+       dnsbl_threshold => { optional => 1 },
     };
 }
 
@@ -649,6 +668,27 @@ sub pmg_verify_transport_domain {
     return $name;
 }
 
+PVE::JSONSchema::register_format(
+    'transport-domain-or-email', \&pmg_verify_transport_domain_or_email);
+
+sub pmg_verify_transport_domain_or_email {
+    my ($name, $noerr) = @_;
+
+    my $namere = "([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?)";
+
+    # email address
+    if ($name =~ m/^(?:[^\s\/\@]+\@)(${namere}\.)*${namere}$/) {
+       return $name;
+    }
+
+    # like dns-name, but can contain leading dot
+    if ($name !~ /^\.?(${namere}\.)*${namere}$/) {
+          return undef if $noerr;
+          die "value does not look like a valid transport domain or email address\n";
+    }
+    return $name;
+}
+
 PVE::JSONSchema::register_format(
     'dnsbl-entry', \&pmg_verify_dnsbl_entry);
 
@@ -934,7 +974,7 @@ sub read_transport_map {
        if ($line =~ m/^(\S+)\s+smtp:(\S+):(\d+)\s*$/) {
            my ($domain, $host, $port) = ($1, $2, $3);
 
-           eval { pmg_verify_transport_domain($domain); };
+           eval { pmg_verify_transport_domain_or_email($domain); };
            if (my $err = $@) {
                $parse_error->($err);
                next;
@@ -1071,11 +1111,19 @@ sub get_template_vars {
        $vars->{postfix}->{dnsbl_sites} = join(',', @dnsbl_sites);
     }
 
+    $vars->{postfix}->{dnsbl_threshold} = $self->get('mail', 'dnsbl_threshold');
+
     my $usepolicy = 0;
     $usepolicy = 1 if $self->get('mail', 'greylist') ||
        $self->get('mail', 'spf');
     $vars->{postfix}->{usepolicy} = $usepolicy;
 
+    if ($int_ip =~ m/^$IPV6RE$/) {
+        $vars->{postfix}->{int_ip} = "[$int_ip]";
+    } else {
+        $vars->{postfix}->{int_ip} = $int_ip;
+    }
+
     my $resolv = PVE::INotify::read_file('resolvconf');
     $vars->{dns}->{hostname} = $nodename;