source: trunk/dnsbl/dnsbl.cgi@ 7

Last change on this file since 7 was 7, checked in by Kris Deugau, 15 years ago

/trunk/dnsbl

export-dnsbl

  • Spit out SOA and NS records for rbldns/cidr output, Just In Case

browse.cgi:

  • Show comments for listme(block) and listme(org) ratings

dnsbl.cgi

  • Show registrar-parent browse detail on IPs submitted for listing. Copied most of browse.cgi code into dnsbl.cgi - this should really be split out

templates/report.tmpl

  • Added space for browse list data, added reference to CSS for browse listings

templates/browse.tmpl

  • Split out CSS for browse formatting into separate file instead of inline <style> header tag

templates/dnsbl.css

  • CSS for browse data
  • Property svn:executable set to *
  • Property svn:keywords set to Date Rev Author Id
File size: 6.0 KB
Line 
1#!/usr/bin/perl
2
3use strict;
4use warnings;
5use CGI::Carp qw (fatalsToBrowser);
6use CGI::Simple;
7use HTML::Template;
8use DNSBL;
9
10# Set up the CGI object...
11my $q = new CGI::Simple;
12# ... and get query-string params as well as POST params if necessary
13$q->parse_query_string;
14
15my %webvar;
16# This is probably excessive fiddling, but it puts the parameters somewhere my fingers know about...
17foreach ($q->param()) {
18 $webvar{$_} = $q->param($_);
19}
20
21my $dnsbl = new DNSBL;
22
23my $dbh = $dnsbl->connect;
24
25print "Content-type: text/html\n\n";
26
27my $page;
28my $templatedir = "templates";
29
30# decide which page to spit out...
31if (!$webvar{page}) {
32 $page = HTML::Template->new(filename => "$templatedir/index.tmpl");
33} else {
34 $page = HTML::Template->new(filename => "$templatedir/$webvar{page}.tmpl");
35}
36
37if ($webvar{page} eq 'report') {
38 $page->param(ip => $webvar{ip});
39 my $count = $dnsbl->ipexists($webvar{ip});
40 $page->param(nreports => $count) if $count;
41 $page->param(browsebits => browse($dbh,$webvar{ip}));
42 for (my $i=0; $i<3; $i++) {
43 my ($block,$org) = $dnsbl->getcontainer($webvar{ip},$i);
44 if ($block) {
45 $page->param("block$i" => $block);
46 $page->param("org$i" => $org);
47 }
48 }
49} elsif ($webvar{page} eq 'dbreport') {
50 my $count = $dnsbl->report($webvar{ip});
51 my $org0id = $dnsbl->orgexists($webvar{org0});
52 if (!$org0id) {
53 $org0id = $dnsbl->addorg($webvar{org0});
54 $page->param(org0 => $webvar{org0});
55 }
56 if (!$dnsbl->blockexists($webvar{block0})) {
57 $dnsbl->addblock($webvar{block0}, $org0id, 0);
58 $page->param(block0 => $webvar{block0});
59 }
60# yes, this is grotty. PTHBTT!
61 if ($webvar{block1}) {
62 my $org1id = $dnsbl->orgexists($webvar{org1});
63 if (!$org1id) {
64 $org1id = $dnsbl->addorg($webvar{org1});
65 $page->param(org1 => $webvar{org1});
66 }
67 if (!$dnsbl->blockexists($webvar{block1})) {
68 $dnsbl->addblock($webvar{block1}, $org1id, 1);
69 $page->param(block1 => $webvar{block1});
70 }
71 if ($webvar{block2}) {
72 my $org2id = $dnsbl->orgexists($webvar{org2});
73 if (!$org2id) {
74 $org2id = $dnsbl->addorg($webvar{org2});
75 $page->param(org2 => $webvar{org2});
76 }
77 if (!$dnsbl->blockexists($webvar{block2})) {
78 $dnsbl->addblock($webvar{block2}, $org2id, 2);
79 $page->param(block2 => $webvar{block2});
80 }
81 }
82 }
83
84 $page->param(ip => $webvar{ip});
85}
86print $page->output;
87
88exit 0;
89
90
91
92## extra subs. should probably put this in a module somehow to share with browse.cgi
93
94sub browse {
95 my $dbh = shift;
96 my $ip = shift;
97
98 my $basesql = "SELECT b.block,o.orgname,b.listme,o.listme,b.comments,o.comments ".
99 "FROM blocks b INNER JOIN orgs o ON b.orgid=o.orgid ".
100 "WHERE b.block ";
101
102 my $sth0 = $dbh->prepare($basesql." >> ? AND b.level=0 ORDER BY block");
103 my $sth1 = $dbh->prepare($basesql." <<= ? AND b.level=1 ORDER BY block");
104 my $sth2 = $dbh->prepare($basesql." <<= ? AND b.level=2 ORDER BY block");
105 my $sthiplist = $dbh->prepare("select * from iplist where ip <<= ? order by ip");
106
107 my %ipseen;
108 my $out = '';
109
110 $sth0->execute($ip);
111 while (my ($block0,$org0,$listmeb0,$listmeo0,$bcomments0,$ocomments0) = $sth0->fetchrow_array) {
112 $out .= "<div class=\"lvl0".($dnsbl->autolist_block($block0) ? ' auto0"' : '"').
113 "><span".($listmeb0 ? ' class=b0list' : '').">$block0".
114 ($listmeb0 ? " ($bcomments0)" : '')."</span> ".
115 "<span".($listmeo0 ? ' class=b0org' : '').">$org0".
116 ($listmeo0 ? " ($ocomments0)" : '')."</span>\n";
117 $sth1->execute($block0);
118 if ($sth1->rows > 0) {
119 while (my ($block1,$org1,$listmeb1,$listmeo1,$bcomments1,$ocomments1) = $sth1->fetchrow_array) {
120# lvl 1 div open
121 $out .= " <div class=\"lvl1".($dnsbl->autolist_block($block1) ? ' auto1"' : '"').
122 "><span".($listmeb1 ? ' class=b1list' : '').">$block1".
123 ($listmeb1 ? " ($bcomments1)" : '')."</span> ".
124 "<span".($listmeo1 ? ' class=b1org' : '').">$org1".
125 ($listmeo1 ? " ($ocomments1)" : '')."</span>\n";
126 $sth2->execute($block1);
127 if ($sth2->rows > 0) {
128 while (my ($block2,$org2,$listmeb2,$listmeo2,$bcomments2,$ocomments2) = $sth2->fetchrow_array) {
129# lvl 2 div open
130 $out .= " <div class=\"lvl2".($dnsbl->autolist_block($block2) ? ' auto2"' : '"').
131 "><span".($listmeb2 ? ' class=b2list' : '').">$block2".
132 ($listmeb2 ? " ($bcomments2)" : '')."</span> ".
133 "<span".($listmeo2 ? ' class=b2org' : '').">$org2".
134 ($listmeo2 ? " ($ocomments2)" : '')."</span>\n";
135 $sthiplist->execute($block2);
136 $out .= " <div class=iplist>\n";
137 while (my @data4 = $sthiplist->fetchrow_array) {
138 $out .= " $data4[0]<br>\n";
139 $ipseen{$data4[0]} = 1;
140 }
141 $out .= " </div>\n";
142# lvl2 div close
143 $out .= " </div>\n";
144 }
145 } else {
146 $sthiplist->execute($block1);
147 $out .= " <div class=iplist>\n";
148 while (my @data4 = $sthiplist->fetchrow_array) {
149 $out .= " $data4[0]<br>\n";
150 $ipseen{$data4[0]} = 1;
151 }
152 $out .= " </div>\n";
153 }
154
155 my $sqlalt = "select ip from iplist where ip << ?";
156 my $sthalt = $dbh->prepare($sqlalt);
157 $sthalt->execute($block1);
158 my @newips;
159 while (my @data4 = $sthalt->fetchrow_array) {
160 push @newips, $data4[0] if !$ipseen{$data4[0]};
161 $ipseen{$data4[0]} = 1;
162 }
163 if ($#newips > -1) {
164 $out .= " <div class=iplist>\n";
165 foreach (@newips) {
166 $out .= " $_<br>\n";
167 }
168 $out .= " </div>\n";
169 }
170# lvl 1 div close
171 $out .= " </div>\n";
172 }
173 } else {
174 $sthiplist->execute($block0);
175 $out .= " <div class=iplist>\n";
176 while (my @data4 = $sthiplist->fetchrow_array) {
177 $out .= " $data4[0]<br>\n";
178 $ipseen{$data4[0]} = 1;
179 }
180 $out .= " </div>\n";
181 }
182
183 my $sqlalt = "select ip from iplist where ip << ?";
184 my $sthalt = $dbh->prepare($sqlalt);
185 $sthalt->execute($block0);
186 my @newips;
187 while (my @data4 = $sthalt->fetchrow_array) {
188 push @newips, $data4[0] if (!$ipseen{$data4[0]});
189 }
190 if ($#newips > -1) {
191 $out .= " <div class=iplist>\n";
192 foreach (@newips) {
193 $out .= " $_<br>\n";
194 }
195 $out .= " </div>\n";
196 }
197
198 $out .= "</div>\n";
199 }
200
201 return $out;
202} # end browse()
Note: See TracBrowser for help on using the repository browser.