#!/usr/pkg/bin/perl
# $Id: sendban.pl 283 2012-03-22 15:55:46Z bouyer $

use strict;
use IO::Socket::UNIX;

sub usage
{
	print STDERR "usage: \n" .
	    "\t$0 BAN <ip> <service> <delay>\n" .
	    "\t$0 UNBAN <ip> <service>\n";
	exit 1;
}

my $sockpath = "/var/run/band.sock";

if ($#ARGV < 2) {
	print STDERR "U0\n";
	usage();
}

my $command = $ARGV[0];
my $ip = $ARGV[1];
my $service = $ARGV[2];
my $cmd;

if (! ($ip =~ /^[\d]+\.[\d]+\.[\d]+\.[\d]+$/)) {
	print STDERR "bad ip $ip\n";
	exit 1;
}

if (! ($service =~ /^[\w]+$/)) {
	print STDERR "bad service $service\n";
	exit 1;
}

if ($command eq "BAN") {
	if ( $#ARGV != 3) {
		print STDERR "U4\n";
		usage();
	}
	my $delay = $ARGV[3];
	if (! ($delay =~ /^[\d]+$/)) {
		print STDERR "bad delay $delay\n";
		exit 1;
	}
	$cmd = "BAN $ip $service $delay";
} elsif ($command eq "UNBAN") {
	if ($#ARGV != 2) {
		print STDERR "U1\n";
		usage();
	}
	$cmd = "UNBAN $ip $service";
} else {
	print STDERR "U2\n";
	usage();
}

my $controls = new IO::Socket::UNIX (
	Type => SOCK_STREAM,
	Peer => $sockpath
);
die "can't connect do daemon: $!" unless $controls;

print $controls "$cmd\n" or die "can't write to daemon: $!";
exit 0;
