summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatarDoug Freed <dwfreed@mtu.edu>2016-01-15 02:46:47 -0700
committerLibravatarDoug Freed <dwfreed@mtu.edu>2016-01-15 02:46:47 -0700
commit374883557144bdfa642de89b663351f13291f27c (patch)
tree41f93beaac88c80e06f9d9143018bfaeb00ae99a
parentdc6896ebcdef5b0e1d296b689deaa6390067778f (diff)
Update web files
-rwxr-xr-xcgi-bin/query.pl56
-rwxr-xr-xcgi-bin/secret/investigate.pl49
-rwxr-xr-xcgi-bin/secret/logs.pl22
-rw-r--r--syntax.txt51
4 files changed, 102 insertions, 76 deletions
diff --git a/cgi-bin/query.pl b/cgi-bin/query.pl
index 35c2455..eef0b09 100755
--- a/cgi-bin/query.pl
+++ b/cgi-bin/query.pl
@@ -5,7 +5,7 @@ use Data::Dumper;
use strict;
use DBI;
-use CGI_Lite;
+use CGI;
use XML::Simple qw(:strict);
my $xs1 = XML::Simple->new( KeyAttr => ['id'], Cache => [ qw/memcopy/ ]);
@@ -27,10 +27,10 @@ sub esc
return $arg;
}
-my $cgi = new CGI_Lite;
-my %data = $cgi->parse_form_data;
+my $cgi = CGI->new;
+my %data = %{$cgi->{param}};
-$debug = int($data{debug}) if (defined($data{debug}));
+$debug = int($data{debug}->[0]) if (defined($data{debug}));
if ($debug) {
print "Content-type: text/plain", "\n\n";
@@ -45,54 +45,54 @@ my ($level, $id, $reason);
my $qry = "SELECT time, channel, nick, user, host, gecos, level, id, reason FROM alertlog WHERE ";
-if (defined($data{channel})) {
- $qry = $qry . "channel like " . esc($data{channel});
+if (defined($data{channel}->[0])) {
+ $qry = $qry . "channel like " . esc($data{channel}->[0]);
} else { die "channel not defined!\n"; }
-if (defined($data{nick}) && ($data{nick} ne "*") && ($data{nick} ne "")) {
- $qry .= " and nick like " . esc($data{nick});
+if (defined($data{nick}->[0]) && ($data{nick}->[0] ne "*") && ($data{nick}->[0] ne "")) {
+ $qry .= " and nick like " . esc($data{nick}->[0]);
}
-if (defined($data{user}) && ($data{user} ne "*") && ($data{user} ne "")) {
- $qry .= " and user like " . esc($data{user});
+if (defined($data{user}->[0]) && ($data{user}->[0] ne "*") && ($data{user}->[0] ne "")) {
+ $qry .= " and user like " . esc($data{user}->[0]);
}
-if (defined($data{host}) && ($data{host} ne "*") && ($data{host} ne "")) {
- $qry .= " and host like " . esc($data{host});
+if (defined($data{host}->[0]) && ($data{host}->[0] ne "*") && ($data{host}->[0] ne "")) {
+ $qry .= " and host like " . esc($data{host}->[0]);
}
-if (defined($data{gecos}) && ($data{gecos} ne "*") && ($data{gecos} ne "")) {
- $qry .= " and gecos like " . esc($data{gecos});
+if (defined($data{gecos}->[0]) && ($data{gecos}->[0] ne "*") && ($data{gecos}->[0] ne "")) {
+ $qry .= " and gecos like " . esc($data{gecos}->[0]);
}
-if (defined($data{since})) {
+if (defined($data{since}->[0])) {
$qry .= sprintf("and time > '%04d-%02d-%02d %02d:%02d:%02d'",
- int($data{syear}), int($data{smonth}), int($data{sday}),
- int($data{shour}), int($data{smin}), int($data{ssec}));
+ int($data{syear}->[0]), int($data{smonth}->[0]), int($data{sday}->[0]),
+ int($data{shour}->[0]), int($data{smin}->[0]), int($data{ssec}->[0]));
}
-if (defined($data{before})) {
+if (defined($data{before}->[0])) {
$qry .= sprintf("and time < '%04d-%02d-%02d %02d:%02d:%02d'",
- int($data{byear}), int($data{bmonth}), int($data{bday}),
- int($data{bhour}), int($data{bmin}), int($data{bsec}));
+ int($data{byear}->[0]), int($data{bmonth}->[0]), int($data{bday}->[0]),
+ int($data{bhour}->[0]), int($data{bmin}->[0]), int($data{bsec}->[0]));
}
#if (defined($data{id})) {
# $qry .= " and id = " . $dbh->quote($data{id});
#}
-if (defined($data{level}) && ($data{level} ne "any")) {
- $qry .= " and level = " . $dbh->quote($data{level});
+if (defined($data{level}->[0]) && ($data{level}->[0] ne "any")) {
+ $qry .= " and level = " . $dbh->quote($data{level}->[0]);
}
-if (defined($data{reason})) {
- $qry .= " and reason like " . esc($data{reason});
+if (defined($data{reason}->[0])) {
+ $qry .= " and reason like " . esc($data{reason}->[0]);
}
-if (defined($data{sort}) && defined($data{order}) && ($data{order} =~ /^[ad]$/ ) &&
- ( $data{sort} =~ /^(time|nick|user|host|level|id|reason)$/ ) ) {
- $qry .= " order by " . $data{sort};
- $qry .= " desc" if $data{order} eq "d";
+if (defined($data{sort}) && defined($data{order}) && ($data{order}->[0] =~ /^[ad]$/ ) &&
+ ( $data{sort}->[0] =~ /^(time|nick|user|host|level|id|reason)$/ ) ) {
+ $qry .= " order by " . $data{sort}->[0];
+ $qry .= " desc" if $data{order}->[0] eq "d";
}
if ($debug) {
diff --git a/cgi-bin/secret/investigate.pl b/cgi-bin/secret/investigate.pl
index 23a5945..6b48027 100755
--- a/cgi-bin/secret/investigate.pl
+++ b/cgi-bin/secret/investigate.pl
@@ -5,7 +5,7 @@ use Data::Dumper;
use strict;
use DBI;
-use CGI_Lite;
+use CGI;
use XML::Simple qw(:strict);
my $xs1 = XML::Simple->new( KeyAttr => ['id'], Cache => [ qw/memcopy/ ]);
my $sqlconf = $xs1->XMLin( "/home/icxcnika/AntiSpamMeta/config-main/mysql.xml",
@@ -13,6 +13,7 @@ my $sqlconf = $xs1->XMLin( "/home/icxcnika/AntiSpamMeta/config-main/mysql.xml",
'GroupTags' => { ignoredidents => 'ident', ignoredgecos => 'geco' });
my $dbh = DBI->connect("DBI:mysql:database=" . $sqlconf->{db} . ";host=" . $sqlconf->{host} . ";port=" . $sqlconf->{port}, $sqlconf->{user}, $sqlconf->{pass});
+$dbh->do("SET time_zone = '+0:00';");
my $debug = 0;
@@ -38,8 +39,8 @@ sub dottedQuadToInt
return $ip_number;
}
-my $cgi = new CGI_Lite;
-my %data = $cgi->parse_form_data;
+my $cgi = CGI->new;
+my %data = %{$cgi->{param}};
$debug = int($data{debug}) if (defined($data{debug}));
@@ -51,7 +52,11 @@ print <<HTML;
<title>AntiSpamMeta database query page</title>
</head>
<body>
- <h3>Maintaining AntiSpamMeta takes work! Please
+ <h1>NEW: READ ME.</h1>
+ <h2>I'm looking to move AntiSpamMeta, and its databases, to a new server. This will cost me about \$400/year, however will allow
+ for recursive lookups similar to stalker.pl - Finding a nick tied to a host tied to another nick tied to a nickserv account tied to a geco, etc.</h2>
+ <h2>This will make the most comprehensive tracking database for Freenode to date, but I need your help with the bills!</h2>
+<h3>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----
@@ -64,12 +69,12 @@ except for the realIP field, which must be blank or an IPv4 dotted quad.</p>
<form action="/cgi-bin/secret/investigate.pl" method="get">
<input type="hidden" name="query" value="1" />
HTML
-print ' Nickname: <input type="text" name="nick" ' . (defined($data{nick}) ? 'value="'.$data{nick}.'" ' : '') . "/><br />\n";
-print ' User: <input type="text" name="user" ' . (defined($data{user}) ? 'value="'.$data{user}.'" ' : '') . "/><br />\n";
-print ' Hostname: <input type="text" name="host" ' . (defined($data{host}) ? 'value="'.$data{host}.'" ' : '') . "/><br />\n";
-print ' Gecos: <input type="text" name="gecos" ' . (defined($data{gecos}) ? 'value="'.$data{gecos}.'" ' : '') . "/><br />\n";
-print ' Account: <input type="text" name="account" ' . (defined($data{account}) ? 'value="'.$data{account}.'" ' : '') . "/><br />\n";
-print ' Real IP: <input type="text" name="realip" ' . (defined($data{realip}) ? 'value="'.$data{realip}.'" ' : '') . "/>\n";
+print ' Nickname: <input type="text" name="nick" ' . (defined($data{nick}) ? 'value="'.$data{nick}->[0].'" ' : '') . "/><br />\n";
+print ' User: <input type="text" name="user" ' . (defined($data{user}) ? 'value="'.$data{user}->[0].'" ' : '') . "/><br />\n";
+print ' Hostname: <input type="text" name="host" ' . (defined($data{host}) ? 'value="'.$data{host}->[0].'" ' : '') . "/><br />\n";
+print ' Gecos: <input type="text" name="gecos" ' . (defined($data{gecos}) ? 'value="'.$data{gecos}->[0].'" ' : '') . "/><br />\n";
+print ' Account: <input type="text" name="account" ' . (defined($data{account}) ? 'value="'.$data{account}->[0].'" ' : '') . "/><br />\n";
+print ' Real IP: <input type="text" name="realip" ' . (defined($data{realip}) ? 'value="'.$data{realip}->[0].'" ' : '') . "/>\n";
print <<HTML;
<br /><br /><input type="submit" value="Query!" />
</form>
@@ -106,28 +111,28 @@ HTML
## nick, user, host, realip, gecos, account
my $qry = 'SELECT * FROM ' . $sqlconf->{actiontable} . ' WHERE ';
-if (defined($data{nick}) && ($data{nick} ne "*") && ($data{nick} ne "")) {
- $qry .= " nick like " . esc($data{nick}) . ' or ';
+if (defined($data{nick}) && ($data{nick}->[0] ne "*") && ($data{nick}->[0] ne "")) {
+ $qry .= " nick like " . esc($data{nick}->[0] ) . ' or ';
}
-if (defined($data{user}) && ($data{user} ne "*") && ($data{user} ne "")) {
- $qry .= ' user like ' . esc($data{user}) . ' or ';
+if (defined($data{user}) && ($data{user}->[0] ne "*") && ($data{user}->[0] ne "")) {
+ $qry .= ' user like ' . esc($data{user}->[0] ) . ' or ';
}
-if (defined($data{host}) && ($data{host} ne "*") && ($data{host} ne "")) {
- $qry .= ' host like ' . esc($data{host}) . ' or ';
+if (defined($data{host}) && ($data{host}->[0] ne "*") && ($data{host}->[0] ne "")) {
+ $qry .= ' host like ' . esc($data{host}->[0] ) . ' or ';
}
-if (defined($data{gecos}) && ($data{gecos} ne "*") && ($data{gecos} ne "")) {
- $qry .= ' gecos like ' . esc($data{gecos}) . ' or ';
+if (defined($data{gecos}) && ($data{gecos}->[0] ne "*") && ($data{gecos}->[0] ne "")) {
+ $qry .= ' gecos like ' . esc($data{gecos}->[0] ) . ' or ';
}
-if (defined($data{account}) && ($data{account} ne "*") && ($data{account} ne "")) {
- $qry .= ' account like ' . esc($data{account}) . ' or ';
+if (defined($data{account}) && ($data{account}->[0] ne "*") && ($data{account}->[0] ne "")) {
+ $qry .= ' account like ' . esc($data{account}->[0] ) . ' or ';
}
-if (defined($data{realip}) && ($data{realip} =~ /^\d+\.\d+\.\d+\.\d+$/)) {
- $qry .= ' ip = ' . dottedQuadToInt($data{realip}) . ' or ';
+if (defined($data{realip}) && ($data{realip}->[0] =~ /^\d+\.\d+\.\d+\.\d+$/)) {
+ $qry .= ' ip = ' . dottedQuadToInt($data{realip}->[0] ) . ' or ';
}
$qry .= '(1 = 0)'; # rather than trying to get rid of a trailing 'or '
diff --git a/cgi-bin/secret/logs.pl b/cgi-bin/secret/logs.pl
index c1d2313..111fffb 100755
--- a/cgi-bin/secret/logs.pl
+++ b/cgi-bin/secret/logs.pl
@@ -5,10 +5,10 @@ use Data::Dumper;
use strict;
use DBI;
-use CGI_Lite;
-my $cgi = new CGI_Lite;
-my %data = $cgi->parse_form_data;
-my $index = $data{index};
+use CGI;
+my $cgi = CGI->new;
+my %data = %{$cgi->{param}};
+my $index = $data{index}->[0];
print "Content-type: text/plain", "\n\n";
if ( !defined($index) ) {
print "Nice hax!\n";
@@ -17,13 +17,13 @@ if ( !defined($index) ) {
$index = int $index;
my $i = int($index / 10000) + 1;
-if ( -e "/var/www/actionlogs/${i}0K.tar.gz") {
- print "tar -Oxf /var/www/actionlogs/${i}0K.tar.gz $index.txt\n\n";
- print `tar -Oxf /var/www/actionlogs/${i}0K.tar.gz $index.txt`;
-} elsif ( -e "/var/www/actionlogs/$index.txt.lzma" ) {
- print `lzcat /var/www/actionlogs/$index.txt.lzma`;
-} elsif ( -e "/var/www/actionlogs/$index.txt" ) {
- print `cat /var/www/actionlogs/$index.txt`;
+if ( -e "/var/www/antispammeta.net/actionlogs/${i}0K.tar.gz") {
+ print "tar -Oxf /var/www/antispammeta.net/actionlogs/${i}0K.tar.gz $index.txt\n\n";
+ print `tar -Oxf /var/www/antispammeta.net/actionlogs/${i}0K.tar.gz $index.txt`;
+} elsif ( -e "/var/www/antispammeta.net/actionlogs/$index.txt.lzma" ) {
+ print `lzcat /var/www/antispammeta.net/actionlogs/$index.txt.lzma`;
+} elsif ( -e "/var/www/antispammeta.net/actionlogs/$index.txt" ) {
+ print `cat /var/www/antispammeta.net/actionlogs/$index.txt`;
} else {
print "u wot m8?\n";
}
diff --git a/syntax.txt b/syntax.txt
index 0eecddf..2043d30 100644
--- a/syntax.txt
+++ b/syntax.txt
@@ -17,11 +17,14 @@ List of ASM's commands.
Responds with a URL to the bot's source
;help
- Refers you to ASM's website
+ ASM's least helpful command, accompanied by the least helpful description.
;ping
Replies "pong".
+;ping <string> Restricted to flag "s"
+ pong <string>
+
*** These are commands used for check to see if a user has a "bad past" ***
;db
@@ -47,15 +50,6 @@ List of ASM's commands.
;mship <nick> Restricted to flag "s"
Reports channels that both ASM and <nick> is on.
-;;addwebuser <password> Restricted to flag "s"
- THIS COMMAND MUST BE SENT IN PM, WITH TWO SEMICOLONS.
- This will give you access to the restricted areas of ASM's database, using an http login of
- [yourIRCnick] and [password].
- No assurance of privacy is made with regards to your password. Make it secure, so that someone
- else won't use your login, and make it unique - i.e. not something you use for /ns identify.
-
-
-
*** These commands are for managing who has access to the bot ***
;userx add <nickserv account> <flags> Restricted to flag "a"
@@ -72,11 +66,21 @@ List of ASM's commands.
;userx flags <nickserv account> <flags> Restricted to flag "a"
Sets the flags for that nickserv account - NOT NECESSARILY THE SAME AS THEIR NICK - to the
provided set of flags. Once again, you can't give flags you don't already have, and you can't
- ever give the 'd' flag.
+ ever give the 'd' flag. If you want to give the "d" flag, you will absolutely have to edit
+ the users.xml file by hand.
;userx del <nickserv account> Restricted to flag "a"
Removes the nickserv account from ASM's list of authorized users.
+;;addwebuser <password> Restricted to flag "s"
+ THIS COMMAND MUST BE SENT IN PM, WITH TWO SEMICOLONS.
+ This will give you access to the restricted areas of ASM's database, using an http login of
+ [yourIRCnick] and [password].
+ No assurance of privacy is made with regards to your password. Make it secure, so that someone
+ else won't use your login, and make it unique - i.e. not something you use for /ns identify.
+
+;delwebuser <account> Restricted to flag "a"
+ Deletes an individual's web access.
*** These commands are for managing who/where the bot notifies of bad stuff ***
@@ -86,9 +90,13 @@ List of ASM's commands.
So, to send low-risk alerts and above concerning #spammychannel to #opschannel, you'd do
;target #spammychannel #opschannel info
If a level isn't specified, it defaults to "debug".
+ <nick> may be in the form of $a:nickservAccount in which case ASM will substitute that
+ nickserv account for all nicks currently signed onto that nickserv account
-;detarget <source channel> <target channel> Restricted to flag "a"
- Stops sending messages concerning <source channel> to <target channel>.
+;detarget <source channel> <target channel or nick> Restricted to flag "a"
+ Stops sending messages concerning <source channel> to <target channel or nick>.
+ <nick> may be in the form of $a:nickservAccount in which case ASM will substitute that
+ nickserv account for all nicks currently signed onto that nickserv account
;showhilights <nick> Restricted to flag "h"
shows all the channels that it's configured to hilight <nick> on, and what level it's for.
@@ -96,9 +104,12 @@ List of ASM's commands.
;hilight <channel> <nick><optional:,nick2,nick3> <optional:level> Restricted to flag "h"
Adds <nick[s]> to the list of hilights for <channel> for risks of <level> and above.
If <level> is unspecified, it defaults to "info".
+ <nick> may be in the form of $a:nickservAccount in which case ASM will substitute that
+ nickserv account for all nicks currently signed onto that nickserv account
;dehilight <channel> <nick><optional:,nick2,nick3> Restricted to flag "h"
Removes the list of nicks from the list of hilights for <channel>.
+ <nick> may be in the form of $a:nickservAccount.
*** Blacklist management commands ***
@@ -109,6 +120,9 @@ List of ASM's commands.
is holy use common sense with this. Don't blacklist "nigger" or something like that...
but definitely blacklist "http://spammyurl.com" etc.
+;blacklistpcre <string> Restricted to flag "a"
+ Adds <string> to the list of strings ASM will watch out for. Regular expression matching.
+
;blreason <id> <reason> Restricted to flag "s"
use the ID returned by ;blacklist to set a reason for why you blacklisted it.
@@ -130,13 +144,15 @@ List of ASM's commands.
;rehash Restricted to flag "a"
Re-reads the string blacklist files and config files etc etc.
-;monitor <chan> (yes|no) Restricted to flag "a"
+;monitor <chan> optional:(yes|no) Restricted to flag "a"
Sets whether or not the channel is monitored for spam stuffs.
This is obviously "yes" by default, but some places turn it off for their #blah-ops channel.
+ If yes/no is not specified, show the current state of the monitor flag.
-;silence <chan> (yes|no) Restricted to flag "a"
+;silence <chan> optional:(yes|no) Restricted to flag "a"
Sets whether or not ASM ignores commands (other than !ops) in the channel.
"no" by default; public channels often want this.
+ If yes/no is not specified, show the current state of the silence flag.
;quit <reason> Restricted to flag "a"
Quits IRC using reason as the quit message. ASM is run in a while loop, so it'll probably
@@ -152,6 +168,8 @@ List of ASM's commands.
notrigger - prevents the target from causing the bot to generate a spam alert.
nomsgs - don't relay private messages from target to the master channel
nocommands - prevent target from sending the bot commands.
+ noidstring - e.g. nonickbl_impersonate, to prevent them from triggering the
+ nickbl_impersonate rule
*** Highly restricted debug commands ***
@@ -165,6 +183,9 @@ List of ASM's commands.
;ev <code> Restricted to flag "d"
Evaluates raw perl code - output is sent to STDOUT, not to IRC.
+;wallop <msg> Restricted to flag "d"
+ Does nothing. One day, it'll probably broadcast a message to all target-chans.
+
*** Plugin interface ***