From Thanatoz@SKULLKP to All on Tue Jul 29 20:21:45 2014
So I wrote a script that auto-expires the bans in ip.can and ip-silent.can
it is called banTool and you pass it the days for the ban to last and the file(full path) and it will scan it and throw some comments in the file for "book keeping". I have it set to run at 00:01 each day and I have seen no problems yet.
(I would just check out to make sure that the permanent ban line is up near
the top of the file after the first run)
It runs fine as both a native event or with slightly fancier display from jsexec
Do you see any tweaks or anything wrong with it?
Thanatoz
banTool.js
var fileName;
var after;
var canFile;
var file = [];
var permanent = false;
var expires = [];
var currentExpire;
var now = strftime("%y-%j", time());
var label = "; banTool: ";
if( argv[0] === undefined || argv[1] === undefined)
{
writeln("\n Proper usage is bantool.js ## drive:\path\filename.can");
writeln(" ## is how long this current bunch of bans are to last");
writeln(" file is the full path and file name of the file to be trimmed");
writeln("\n This utility will only run once per day and is reccomended to run at 00:01");
exit(255);
}
else
{
after = argv[0];
fileName = argv[1];
canFile = new File(fileName);
if (!canFile.exists)
{
writeln("\n Please supply the name of a can file that exists or the full path and file name to the file");
exit(254);
}
}
// Read in the can file
writeln("\n Starting processing on "+fileName+"\n\n");
canFile.open("r+");
file = canFile.readAll();
canFile.close();
// Scan the can file and set the expires
currentExpire = argv[0];
for(var i = file.length - 1; i >= 0; i--)
{
if( file[i].charAt(0) != ";" )
{
// do nothing as not a comment
}
else if( file[i].indexOf(label+"Permanent") === 0 )
{
permanent = true;
currentExpire = -1;
}
else if(file[i].indexOf(label+"Last ran on") === 0 ) // Do nothing if already ran today
{
var last = file[i].match(/\d\d\-\d+/i).toString();
if ( now === last )
{
writeln("\n "+fileName+" has already been trimmed today.\n\nThis script will now exit");
exit(0);
}
else
{
file[i] = label + "bans above will expire in "+after+ " days.";
currentExpire = after;
}
}
else if( file[i].indexOf(label + "bans above will expire in") === 0)
{
currentExpire = parseInt(file[i].match(/\d+/i)) -1 ;
file[i] = label + "bans above will expire in "+currentExpire+ " days.";
}
else
{
// some other comments.
}
expires[i] = currentExpire;
}