#!/usr/bin/perl -w

use strict;
use Errno;
use esmith::ConfigDB;
use esmith::util;
use esmith::db;
use Data::Validate::IP;
my $validator=Data::Validate::IP->new;

my $event = $ARGV [0];
my $ip = $ARGV [1];
my $whitelist = $ARGV [2];
my $debug=0;

die "IP missing" unless defined ($ip);
die "Not an IP" unless ($validator->is_ipv4($ip));


die "IP $ip not banned" unless (system("grep $ip /etc/hosts.deny_ssh ".'>/dev/null 2>&1') == 0);
die "can not stop denyhost" unless ( system("/etc/init.d/denyhosts","stop") ==0);

# unlist
my @files = ('/etc/hosts.deny_ssh', '/var/lib/denyhosts/hosts', '/var/lib/denyhosts/hosts-restricted' , '/var/lib/denyhosts/hosts-root', '/var/lib/denyhosts/hosts-valid', '/var/lib/denyhosts/users-hosts' );
foreach my $file (@files) {

	if (system("grep $ip $file".' >/dev/null 2>&1') == 0) {
		print "$ip removed from $file\n" if (system("sed -i '/$ip/d' $file") == 0  && $debug )
	}
}

#(optional, whitelist)  /var/lib/denyhosts/allowed-hosts
if (defined($whitelist)) {
	# add to db
	my $db = esmith::ConfigDB->open
    	|| warn "Couldn't open configuration database (permissions problems?)";
	
    	my $rec = $db->get('denyhosts');
    	if ($rec)
    	{
	
    	my $prop = $rec->prop('ValidFrom') || '';
	
    	my @vals = split /,/, $prop;
    	unless (grep /^$ip$/, @vals) 
	{ # already have this entry
        	if ($prop ne '')
        	{
            		$prop .= ",$ip";
        	}
        	else
        	{
         	   	$prop = "$ip";
        	}
    		$rec->set_prop('ValidFrom', $prop);
	
		system("/sbin/e-smith/expand-template /var/lib/denyhosts/allowed-hosts");
		print "Add to whitelist: $ip \n";
	}
	}
}
# /etc/init.d/denyhosts start
system("/etc/init.d/denyhosts","start");

