IPv6 SPF record support
authorJamie Cameron <jcameron@webmin.com>
Sat, 6 Nov 2010 06:04:26 +0000 (23:04 -0700)
committerJamie Cameron <jcameron@webmin.com>
Sat, 6 Nov 2010 06:04:26 +0000 (23:04 -0700)
bind8/bind8-lib.pl
bind8/lang/en
bind8/records-lib.pl
bind8/save_record.cgi

index c045536..adf7a7f 100755 (executable)
@@ -1057,6 +1057,12 @@ elsif ($type eq "SPF") {
                &ui_textarea("spfip4s", join("\n", @{$spf->{'ip4:'}}),
                             3, 40), 3);
 
+       if (&supports_ipv6()) {
+               print &ui_table_row($text{'value_spfip6s'},
+                       &ui_textarea("spfip6s", join("\n", @{$spf->{'ip6:'}}),
+                                    3, 40), 3);
+               }
+
        print &ui_table_row($text{'value_spfincludes'},
                &ui_textarea("spfincludes", join("\n", @{$spf->{'include:'}}),
                             3, 40), 3);
index 5dcb099..bc494d0 100644 (file)
@@ -276,6 +276,7 @@ edit_eptr='$1' is not a valid reverse address record hostname
 edit_espfa='$1' is not a valid host to allow sending from
 edit_espfmx='$1' is not a valid domain name to allow MX sending from
 edit_espfip='$1' is not a valid IP address or IP/prefix to allow sending from
+edit_espfip6='$1' is not a valid IPv6 address or IPv6/prefix to allow sending from
 edit_espfinclude='$1' is not a valid additional domain from which mail is sent
 edit_espfredirect='$1' is not a valid alternate domain name
 edit_espfexp='$1' is a valid record name for a rejection message
@@ -429,6 +430,7 @@ value_spfptr=Allow sending from any host in domain?
 value_spfas=Additional allowed sender hosts
 value_spfmxs=Additional allowed sender MX domains
 value_spfip4s=Additional allowed sender IP addresses/networks
+value_spfip6s=Additional allowed sender IPv6 addresses/networks
 value_spfincludes=Other domains from which mail is sent
 value_spfall=Action for other senders
 value_spfall3=Disallow (-all)
index b32b7ec..732d8f6 100755 (executable)
@@ -656,7 +656,7 @@ if ($txt =~ /^v=spf1/) {
                if ($w eq "a" || $w eq "mx" || $w eq "ptr") {
                        $spf->{$w} = 1;
                        }
-               elsif ($w =~ /^(a|mx|ip4|ptr|include):(\S+)$/) {
+               elsif ($w =~ /^(a|mx|ip4|ip6|ptr|include):(\S+)$/) {
                        push(@{$spf->{"$1:"}}, $2);
                        }
                elsif ($w eq "-all") {
@@ -698,7 +698,7 @@ local @rv = ( "v=spf1" );
 foreach my $s ("a", "mx", "ptr") {
        push(@rv, $s) if ($spf->{$s});
        }
-foreach my $s ("a", "mx", "ip4", "ptr", "include") {
+foreach my $s ("a", "mx", "ip4", "ip6", "ptr", "include") {
        foreach my $v (@{$spf->{"$s:"}}) {
                push(@rv, "$s:$v");
                }
index d58198c..d1c17e7 100755 (executable)
@@ -288,7 +288,7 @@ else {
                $spf->{'ptr'} = $in{'spfptr'};
                $spf->{'a:'} = [ split(/\s+/, $in{'spfas'}) ];
                foreach my $a (@{$spf->{'a:'}}) {
-                       gethostbyname($a) || &error(&text('edit_espfa', $a));
+                       &to_ipaddress($a) || &error(&text('edit_espfa', $a));
                        }
                $spf->{'mx:'} = [ split(/\s+/, $in{'spfmxs'}) ];
                foreach my $mx (@{$spf->{'mx:'}}) {
@@ -300,6 +300,15 @@ else {
                          ($ip =~ /^(\S+)\/\d+$/ && &check_ipaddress($1)) ||
                            &error(&text('edit_espfip', $ip));
                        }
+               if (&supports_ipv6()) {
+                       $spf->{'ip6:'} = [ split(/\s+/, $in{'spfip6s'}) ];
+                       foreach my $ip (@{$spf->{'ip6:'}}) {
+                               &check_ip6address($ip) ||
+                                 ($ip =~ /^(\S+)\/\d+$/ &&
+                                  &check_ip6address($1)) ||
+                                   &error(&text('edit_espfip6', $ip));
+                               }
+                       }
                $spf->{'include:'} = [ split(/\s+/, $in{'spfincludes'}) ];
                foreach my $i (@{$spf->{'include:'}}) {
                        &valname($i) || &error(&text('edit_espfinclude', $i));