diff -Nur smeserver-qpsmtpd-2.4.0/root/etc/e-smith/templates/var/service/qpsmtpd/config/relayclients/60myAppliances smeserver-qpsmtpd-2.4.0.bz8704/root/etc/e-smith/templates/var/service/qpsmtpd/config/relayclients/60myAppliances --- smeserver-qpsmtpd-2.4.0/root/etc/e-smith/templates/var/service/qpsmtpd/config/relayclients/60myAppliances 1970-01-01 01:00:00.000000000 +0100 +++ smeserver-qpsmtpd-2.4.0.bz8704/root/etc/e-smith/templates/var/service/qpsmtpd/config/relayclients/60myAppliances 2014-12-04 00:41:19.363852378 +0100 @@ -0,0 +1,37 @@ +{ + use esmith::util::network qw(isValidIP); + use Net::IPv4Addr qw(ipv4_in_network ipv4_parse); + + my $relayclients = ${qpsmtpd}{UnauthenticatedRelayClients} || return; + my @relayclients = split /[,:]/, $relayclients; + + my $ndb = esmith::NetworksDB->open_ro(); + + sub convert_to_cidr + { + $_ = shift; + return "$_/32" unless m!/!; + my ($ip,$bits) = ipv4_parse($_); + return "$ip/$bits"; + } + + my @localAccess = map { + convert_to_cidr($_) + } $ndb->local_access_spec(); + + foreach my $relayclient (@relayclients) + { + if (!isValidIP($relayclient)) + { + $OUT .= "## $relayclient is not an IP\n"; + } + elsif (grep { ipv4_in_network($_, $relayclient) } @localAccess) + { + $OUT .= "$relayclient\n"; + } + else + { + $OUT .= "## $relayclient is not in any local network\n"; + } + } +}