#!/usr/bin/perl
#
# resolve hosts in /etc/firewall.d/hosts
# and write the ip's to /etc/firewall.d/hosts.dynamic
#
# This gets executed by cron.

use Socket;

my $hosts_file = "/etc/firewall.d/hosts";
my $dyn_file   = "/etc/firewall.d/hosts.dynamic";

open HOSTS, "< $hosts_file" or die "Could not open $hosts_file: $!\n";

my @hosts, @ips;

while (<HOSTS>) {
  chomp;
  next if /^\s*#/; # ignore comments
  next if /^\s*$/; # ignore empty lines
  push @hosts, $_;
}

close HOSTS;

# resolve hostnames
foreach my $host (@hosts) {
  my $ip = &resolvename($host);
  if ($ip) {
    push @ips, $ip;
  }
}

if (@ips) {
  # save the addresses if dns worked
  open DYN, "> $dyn_file" or die "Could not open $dyn_file: $!\n";
  foreach my $ip (@ips) {
    print DYN "$ip\n";
  }
  close DYN;
}


exit;





sub resolvename {
  my $name = shift;
  return inet_ntoa( (gethostbyname($name))[4] );
}
