- Timestamp:
- 01/05/18 18:06:47 (7 years ago)
- Location:
- trunk/dnsbl
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dnsbl/DNSBL.pm
r54 r66 130 130 131 131 our $err; 132 our $errstr ;132 our $errstr = ''; 133 133 134 134 # basic object subs … … 184 184 "WHERE b.block >>= ? ". 185 185 "GROUP BY b.block,b.level,b.listme,o.listme ORDER BY b.block"); 186 $sthmoron = $dbh->prepare("SELECT ip,s4list FROM iplist WHERE parent = ?");186 $sthmoron = $dbh->prepare("SELECT ip,s4list,white FROM iplist WHERE parent = ?"); 187 187 } 188 188 … … 193 193 my $self = shift; 194 194 my $ip = shift; 195 my $sth = $dbh->prepare("SELECT count FROM iplist WHERE ip=?");195 my $sth = $dbh->prepare("SELECT count, exclude FROM iplist WHERE ip=?"); 196 196 $sth->execute($ip); 197 my ($ret) = $sth->fetchrow_array();197 my $ret = $sth->fetchrow_arrayref(); 198 198 return $ret; 199 199 } # end ipexists() … … 205 205 my $self = shift; 206 206 my $rep = shift; 207 my $exclude = shift; 207 208 my $sth; 208 209 my $rows = 0; … … 214 215 $rows = $sth->rows; 215 216 if ($rows == 0) { 216 $sth = $dbh->prepare("INSERT INTO iplist (ip,parent ) VALUES ".217 "(?,(SELECT block FROM blocks WHERE block >> ? ORDER BY level DESC LIMIT 1) )");218 $sth->execute($rep,$rep ) or die "couldn't add entry for $rep: ".$dbh->errstr."\n";217 $sth = $dbh->prepare("INSERT INTO iplist (ip,parent,exclude) VALUES ". 218 "(?,(SELECT block FROM blocks WHERE block >> ? ORDER BY level DESC LIMIT 1),?)"); 219 $sth->execute($rep,$rep,$exclude) or die "couldn't add entry for $rep: ".$dbh->errstr."\n"; 219 220 } elsif ($rows == 1) { 220 $sth = $dbh->prepare("UPDATE iplist SET count=count+1 WHERE ip=?"); 221 $sth = $dbh->prepare("UPDATE iplist SET count=count+1,". 222 " exclude=".($exclude ? "'y'" : "'n'"). " WHERE ip=?"); 221 223 $sth->execute($rep) or die "couldn't update listing for $rep: ".$dbh->errstr."\n"; 222 224 } else { … … 225 227 $sth = $dbh->prepare("SELECT block FROM blocks WHERE block >> ?"); 226 228 $sth->execute($rep); 227 my $updsth = $dbh->prepare("UPDATE blocks SET ipcount=(SELECT count(*) FROM iplist WHERE ip << ? ) WHERE block=?");229 my $updsth = $dbh->prepare("UPDATE blocks SET ipcount=(SELECT count(*) FROM iplist WHERE ip << ? AND exclude='n') WHERE block=?"); 228 230 while (my ($block) = $sth->fetchrow_array) { 229 231 $updsth->execute($block,$block); … … 309 311 my $orgid = shift; 310 312 my $level = shift; 313 my $exclude = shift; 314 my $comment = shift; 311 315 $blockin =~ s/^\s+//; 312 316 $blockin =~ s/\s+$//; … … 325 329 ($parent) = $sth->fetchrow_array; 326 330 } 327 $sth = $dbh->prepare("INSERT INTO blocks (block,orgid,level,parent, ipcount) VALUES (?,?,?,?,".328 "(SELECT count(*) FROM iplist WHERE ip << ? ))");329 $sth->execute("$block",$orgid,$level,$parent, "$block");331 $sth = $dbh->prepare("INSERT INTO blocks (block,orgid,level,parent,exclude,comments,ipcount) VALUES (?,?,?,?,?,?,". 332 "(SELECT count(*) FROM iplist WHERE ip << ? AND exclude='n'))"); 333 $sth->execute("$block",$orgid,$level,$parent,$exclude,$comment,"$block"); 330 334 $sth = $dbh->prepare("UPDATE iplist SET parent=? WHERE parent=? AND ip << ?"); 331 335 $sth->execute("$block",$parent,"$block"); … … 341 345 342 346 347 # Update a netblock entry. Supports (un)setting the exclude flag and the comment. 348 # Does NOT do any magic around leftover IPs within the block 349 sub updateblock { 350 my $self = shift; 351 my $blockin = shift; 352 my $orgid = shift; 353 my $level = shift; 354 my $exclude = shift; 355 my $comment = shift; 356 $blockin =~ s/^\s+//; 357 $blockin =~ s/\s+$//; 358 my $block = new NetAddr::IP "$blockin"; # need this to clean up messes like ranges. sigh. 359 360 return "$blockin not a single CIDR range" if !$block; 361 362 local $dbh->{AutoCommit} = 0; 363 local $dbh->{RaiseError} = 1; 364 365 my $sth; 366 eval { 367 my $parent = '0/0'; 368 if ($level > 0) { 369 $sth = $dbh->prepare("SELECT block FROM blocks WHERE block >> ? ORDER BY level DESC LIMIT 1"); 370 $sth->execute("$block"); 371 ($parent) = $sth->fetchrow_array; 372 } 373 $sth = $dbh->prepare("UPDATE blocks SET exclude = ?, comments = ?, ipcount = ". 374 "(SELECT count(*) FROM iplist WHERE ip << ? AND exclude='n')". 375 " WHERE block = ?"); 376 $sth->execute($exclude, $comment, "$block", "$block"); 377 $sth = $dbh->prepare("UPDATE iplist SET parent=? WHERE parent=? AND ip << ?"); 378 $sth->execute("$block", $parent, "$block"); 379 $dbh->commit; 380 }; 381 if ($@) { 382 my $msg = $@; 383 eval { dbh->rollback; }; 384 return "failed to update $block: $msg"; 385 } 386 # nb: no need to return anything, since the CIDR block is the key 387 } 388 389 343 390 sub blockexists { 344 391 my $self = shift; … … 351 398 352 399 353 # returns list (block, orgname) for the block that contains the passed IP.400 # returns list (block,blockcomment,orgname) for the block that contains the passed IP. 354 401 # accepts a level argument if you don't want the top-level registrar allocation block 355 402 sub getcontainer { … … 357 404 my $ip = shift; 358 405 my $level = shift || 0; 359 my $sth = $dbh->prepare("SELECT b.block, o.orgname FROM blocks b INNER JOIN orgs o ".406 my $sth = $dbh->prepare("SELECT b.block,b.comments,o.orgname FROM blocks b INNER JOIN orgs o ". 360 407 "ON b.orgid=o.orgid WHERE b.block >> ? AND b.level = ?"); 361 408 $sth->execute($ip,$level); … … 375 422 # looking for IP 376 423 377 $sth = $dbh->prepare("SELECT ip,s4list FROM iplist WHERE ip=?");424 $sth = $dbh->prepare("SELECT ip,s4list,exclude FROM iplist WHERE ip=?"); 378 425 $sth->execute($entity); 379 426 my @ret = $sth->fetchrow_array; … … 385 432 my $masklen = $1; 386 433 387 $sth = $dbh->prepare("SELECT block,listme FROM blocks WHERE block=?");434 $sth = $dbh->prepare("SELECT block,listme,exclude,ipcount FROM blocks WHERE block = ?"); 388 435 $sth->execute($entity); 389 my ($block, $listme) = $sth->fetchrow_array;436 my ($block, $listme, $exclude, $bcount) = $sth->fetchrow_array; 390 437 391 438 return if !$block; 392 439 393 $sth = $dbh->prepare("SELECT ipcount FROM blocks WHERE block = ?"); 394 $sth->execute($entity); 395 my ($bcount) = $sth->fetchrow_array; 396 my @ret = ( ($bcount >= $autolist{$masklen}), $listme); 440 my @ret = ( ($bcount >= $autolist{$masklen}), $listme, $exclude); 397 441 return @ret; 398 442 … … 433 477 my $bitmask = shift || 0; 434 478 479 if ($level == 0) { 480 $errstr = ''; 481 } 482 483 return if ($errstr =~ /no connection to the server/); 435 484 if ($level > $maxlvl) { 436 485 warn "getting too deep, breaking off! ($container, $level)\n"; … … 447 496 } 448 497 498 499 # catch database-went-away errors 500 local $dbh->{RaiseError} = 1; 501 eval { 502 503 449 504 my $sth = $dbh->prepare("SELECT count(*) FROM blocks WHERE parent = ?"); 450 505 $sth->execute($container); … … 459 514 my $listorg; 460 515 my $bcount; 516 my $bexclude; 461 517 if ($container ne '0.0.0.0/0') { 462 $sth = $dbh->prepare("SELECT b.ipcount,b.listme, o.listme ".518 $sth = $dbh->prepare("SELECT b.ipcount,b.listme,b.exclude,o.listme ". 463 519 "FROM blocks b INNER JOIN orgs o ON b.orgid=o.orgid ". 464 520 "WHERE b.block = ?"); 465 521 $sth->execute($container); 466 ($bcount,$listme,$listorg) = $sth->fetchrow_array(); 467 522 ($bcount,$listme,$bexclude,$listorg) = $sth->fetchrow_array(); 468 523 $bitmask |= $bitfields{$level-1} if $bcount >= $autolist{$masklen}; 469 524 $bitmask |= $bitfields{"block".($level-1)} if $listme; … … 473 528 # hm. can't seem to move this prepare elsewhere. :( 474 529 if ($nblocks > 0) { 475 my $sthsubblocks = $dbh->prepare("SELECT block FROM blocks ".530 my $sthsubblocks = $dbh->prepare("SELECT block,exclude FROM blocks ". 476 531 "WHERE level = ? AND parent = ?"); 477 532 $sthsubblocks->execute($level, $container); 478 while (my ($cidr) = $sthsubblocks->fetchrow_array()) { 479 $self->export($listhosts,$mode,$level+1,$cidr,$bitmask); 533 while (my ($cidr, $exclude) = $sthsubblocks->fetchrow_array()) { 534 if ($exclude) { 535 $listhosts->{$cidr} = -1; 536 } else { # don't check subtrees of an excluded block; rbldnsd doesn't support deep flip-flopping like that 537 $self->export($listhosts,$mode,$level+1,$cidr,$bitmask) 538 or die $errstr; 539 } 480 540 } 481 541 } # avoid checking content of subs if we don't have any … … 534 594 535 595 $sthmoron->execute($container); 536 while (my ($ip,$moron) = $sthmoron->fetchrow_array()) { 537 $listhosts->{$ip} |= $bitmask; 596 while (my ($ip,$moron,$exclude) = $sthmoron->fetchrow_array()) { 538 597 if ($moron) { 539 598 $listhosts->{$ip} = $bitfields{slist}; 599 } elsif ($exclude) { 600 $listhosts->{$ip} = -1; 540 601 } else { 602 $listhosts->{$ip} |= $bitmask; 541 603 $listhosts->{$ip} |= $bitfields{ip}; 542 604 } 543 605 } 606 607 608 }; # db-went-away-catching eval 609 if ($@) { 610 $errstr = $@; 611 warn "export truncated: $errstr\n"; 612 return; 613 } 614 544 615 545 616 # get IPs which for reasons unknown are apparently allocated directly from the … … 547 618 # select * from iplist where not (select count(*) from blocks where ip << block) > 0; 548 619 549 return ;620 return 1; 550 621 } # end export() 551 622 -
trunk/dnsbl/DNSBLweb.pm
r59 r66 21 21 22 22 package DNSBLweb; 23 24 use strict; 25 use warnings; 23 26 24 27 use Exporter; … … 56 59 my $pblock = $args{block} || '0/0'; 57 60 58 my $basesql = "SELECT b.block,o.orgname,b.listme,o.listme,b.comments,o.comments ".61 my $basesql = "SELECT b.block,o.orgname,b.listme,o.listme,b.comments,o.comments,b.exclude ". 59 62 "FROM blocks b INNER JOIN orgs o ON b.orgid=o.orgid ". 60 63 "WHERE b.block <<="; … … 62 65 my $sthiplist = $dbh->prepare("SELECT * FROM iplist WHERE ip <<= ? ORDER BY ip"); 63 66 $allsth->execute($pblock,$lvl); 64 while (my ($block,$org,$listmeb,$listmeo,$bcomments,$ocomments ) = $allsth->fetchrow_array) {67 while (my ($block,$org,$listmeb,$listmeo,$bcomments,$ocomments,$bexclude) = $allsth->fetchrow_array) { 65 68 my $tmpl = new HTML::Template(filename => "browse-block.tmpl"); 66 69 my $blockcidr = new NetAddr::IP $block; 67 70 $tmpl->param(lvlclass => "lvl$lvl".($dnsbl->autolist_block($block) ? " auto$lvl" : ''). 68 71 ( $ipcidr->within($blockcidr) ? ' inhere' : '')); 69 70 $tmpl->param(netclass => ($ listmeb ? "b$lvl".'list' : ''));72 # exclude takes precedence over listme 73 $tmpl->param(netclass => ($bexclude ? 'exclude' : ($listmeb ? "b$lvl".'list' : ''))); 71 74 $tmpl->param(net => $block); 72 75 $tmpl->param(orgclass => ($listmeo ? "b$lvl".'org' : '')); … … 81 84 next if $args{ipseen}->{$data4[0]}; 82 85 my %iprow; 86 my @ipclass; 83 87 $iprow{ip} = $data4[0]; 84 88 $iprow{ipcount} = $data4[1]; 85 89 $iprow{indent} = ' 'x$lvl; 86 $iprow{repeater} = 1 if $ip eq $data4[0]; 87 # ip | count | s4list | added 90 push @ipclass, 'repeater' if $ip eq $data4[0]; 91 push @ipclass, 'exclude' if $data4[5]; 92 $iprow{ipclass} = join(' ', @ipclass); 93 # ip | count | s4list | added | parent | exclude 88 94 push @iprows, \%iprow; 89 95 $args{ipseen}->{$data4[0]} = 1; -
trunk/dnsbl/browse.cgi
r51 r66 70 70 $template->param(pgcomment => $config{pgcomment}) if defined($config{pgcomment}); 71 71 72 my $out = DNSBLweb::retlvl($dbh, $dnsbl, 0, block => ' 0/0');72 my $out = DNSBLweb::retlvl($dbh, $dnsbl, 0, block => '162.144.0.0/16'); 73 73 74 74 $template->param(enchilada => $out); -
trunk/dnsbl/dnsbl.cgi
r64 r66 62 62 my $cfgname = $ENV{SERVER_NAME}.$ENV{REQUEST_URI}; 63 63 $cfgname =~ s|[./-]|_|g; 64 $cfgname =~ s|_dnsbl_cgi. +||;64 $cfgname =~ s|_dnsbl_cgi.*||; 65 65 $cfgname =~ s|_$||; 66 66 if (-e "/etc/dnsbl/$cfgname.conf") { … … 124 124 } 125 125 126 my $count = $dnsbl->ipexists($webvar{ip}); 127 $page->param(nreports => $count) if $count; 126 my $ipinfo = $dnsbl->ipexists($webvar{ip}); 127 $page->param(nreports => $ipinfo->[0]) if $ipinfo; 128 $page->param(ipexclude => $ipinfo->[1]) if $ipinfo; 129 # extract and list the entire tree the IP is part of 128 130 $page->param(browsebits => 129 131 DNSBLweb::retlvl($dbh, $dnsbl, 0, ip => $webvar{ip}, block => $dnsbl->getcontainer($webvar{ip},0) )); 130 132 for (my $i=0; $i <= $maxlvl; $i++) { 131 my ($block,$ org) = $dnsbl->getcontainer($webvar{ip},$i);133 my ($block,$comment,$org) = $dnsbl->getcontainer($webvar{ip},$i); 132 134 if ($block) { 133 my ($bcl,$bal) = $dnsbl->islisted($block); 135 $page->param("comment$i" => $comment); 136 my ($bcl,$bal,$bwl) = $dnsbl->islisted($block); 134 137 $page->param("autob$i" => $bcl); 135 $page->param("listb$i" => $bal); 138 $page->param("flag$i" => ($bwl ? 'exclude' : ($bal ? 'b1list' : '')) ); 139 $page->param("excl$i" => $bwl); 136 140 my ($ol) = $dnsbl->islisted($org); 137 141 $page->param("listorg$i" => $ol); … … 159 163 my $orgn = "org$i"; 160 164 my $blockn = "block$i"; 165 my $commentn = "comment$i"; 166 my $excln = "exclude$i"; 161 167 $webvar{$orgn} =~ s/^\s*//; 162 168 $webvar{$orgn} =~ s/\s*$//; 163 169 $webvar{$blockn} =~ s/^\s*//; 164 170 $webvar{$blockn} =~ s/\s*$//; 171 $webvar{$commentn} =~ s/^\s*//; 172 $webvar{$commentn} =~ s/\s*$//; 173 $webvar{$excln} =~ s/on/1/; 165 174 my $orgid = $dnsbl->orgexists($webvar{$orgn}); 166 175 if (!$orgid) { … … 180 189 } 181 190 if (!$dnsbl->blockexists($webvar{$blockn})) { 182 my $ret = $dnsbl->addblock($webvar{$blockn}, $orgid, $i );191 my $ret = $dnsbl->addblock($webvar{$blockn}, $orgid, $i, $webvar{$excln}); 183 192 $err .= "error adding $webvar{$blockn}: $ret<br>\n" if $ret; 184 193 $page->param($blockn => $webvar{$blockn}); 194 } else { 195 my $ret = $dnsbl->updateblock($webvar{$blockn}, $orgid, $i, $webvar{$excln}, $webvar{$commentn}); 196 $err .= "error updating $webvar{$blockn}: $ret<br>\n" if $ret; 185 197 } 186 198 last unless $webvar{"block".($i+1)}; 187 199 } 188 200 189 my $count = $dnsbl->report($webvar{ip} );201 my $count = $dnsbl->report($webvar{ip}, $webvar{excludeip}); 190 202 191 203 $page->param(ip => $webvar{ip}); -
trunk/dnsbl/export-dnsbl
r53 r66 75 75 foreach (sort ipcmp keys %iplist) { 76 76 my $entry; 77 if ($iplist{$_} == -1) { 78 print "!$_\n"; 79 next; 80 } 77 81 if ($iplist{$_} >= 256) { 78 82 if ($iplist{$_} >= 65536) { -
trunk/dnsbl/templates/browse-block.tmpl
r22 r66 4 4 <TMPL_IF subs><TMPL_VAR NAME=subs> 5 5 </TMPL_IF><TMPL_IF iplist><TMPL_VAR NAME=indent> <div class=iplist> 6 <TMPL_LOOP NAME=iplist><TMPL_VAR NAME=indent> <span<TMPL_IF repeater> class="repeater"</TMPL_IF>><TMPL_VAR NAME=ip> (<TMPL_VAR NAME=ipcount>)</span><br> 6 <TMPL_LOOP NAME=iplist><TMPL_VAR NAME=indent> 7 <span class="<TMPL_VAR NAME=ipclass>"><TMPL_VAR NAME=ip> (<TMPL_VAR NAME=ipcount>)</span><br> 7 8 </TMPL_LOOP> 8 9 <TMPL_VAR NAME=indent> </div></TMPL_IF> -
trunk/dnsbl/templates/dbreport.tmpl
r52 r66 7 7 <TMPL_VAR NAME=pgcomment> 8 8 <table><tr><td valign=top> 9 added <TMPL_VAR NAME=ip> 9 added <TMPL_VAR NAME=ip><TMPL_IF ipexcl> as excluded</TMPL_IF> 10 10 <TMPL_IF org0><br>added <TMPL_VAR NAME=org0></TMPL_IF> 11 11 <TMPL_IF block0><br>added level 0 block <TMPL_VAR NAME=block0></TMPL_IF> 12 <TMPL_IF excl0> as excluded</TMPL_IF> 12 13 <TMPL_IF org1><br>added <TMPL_VAR NAME=org1></TMPL_IF> 13 14 <TMPL_IF block1><br>added level 1 block <TMPL_VAR NAME=block1></TMPL_IF> 15 <TMPL_IF excl1> as excluded</TMPL_IF> 14 16 <TMPL_IF org2><br>added <TMPL_VAR NAME=org2></TMPL_IF> 15 17 <TMPL_IF block2><br>added level 2 block <TMPL_VAR NAME=block2></TMPL_IF> 18 <TMPL_IF excl2> as excluded</TMPL_IF> 16 19 <TMPL_IF org3><br>added <TMPL_VAR NAME=org3></TMPL_IF> 17 20 <TMPL_IF block3><br>added level 3 block <TMPL_VAR NAME=block3></TMPL_IF> 21 <TMPL_IF excl3> as excluded</TMPL_IF> 18 22 <TMPL_IF org4><br>added <TMPL_VAR NAME=org4></TMPL_IF> 19 23 <TMPL_IF block4><br>added level 4 block <TMPL_VAR NAME=block4></TMPL_IF> 24 <TMPL_IF excl4> as excluded</TMPL_IF> 20 25 <TMPL_IF org5><br>added <TMPL_VAR NAME=org5></TMPL_IF> 21 26 <TMPL_IF block5><br>added level 5 block <TMPL_VAR NAME=block5></TMPL_IF> 27 <TMPL_IF excl5> as excluded</TMPL_IF> 22 28 <TMPL_IF org6><br>added <TMPL_VAR NAME=org6></TMPL_IF> 23 29 <TMPL_IF block6><br>added level 6 block <TMPL_VAR NAME=block6></TMPL_IF> 30 <TMPL_IF excl6> as excluded</TMPL_IF> 24 31 <TMPL_IF err><hr><TMPL_VAR NAME=err></TMPL_IF> 25 32 <hr><a href="<TMPL_VAR NAME=dnsblsiteroot>">Back</a> -
trunk/dnsbl/templates/dnsbl.css
r56 r66 2 2 body { 3 3 font-family: "Times New Roman",Times,serif; 4 background: #cccccc; 4 5 } 5 6 input { … … 166 167 background: #990000; 167 168 border: 2px solid #000000; 169 margin: 1px; 170 } 171 172 .exclude { 173 background: #ffffff; 174 border: 1px solid #000000; 168 175 margin: 1px; 169 176 } -
trunk/dnsbl/templates/report.tmpl
r65 r66 8 8 <table><tr><td valign=top> 9 9 <table border=1> 10 <tr>11 <td><TMPL_VAR NAME=ip><TMPL_IF NAME=nreports></td>12 <td>(reported <TMPL_VAR NAME=nreports> time(s))</TMPL_IF></td>13 <td><a href="<TMPL_VAR NAME=dnsblsiteroot>">Back</a></td></tr>14 <tr><td colspan="3"><TMPL_VAR NAME=revinfo></td></tr>15 10 16 11 <form action="dnsbl.cgi"> … … 18 13 <input type=hidden name=ip value=<TMPL_VAR NAME=ip>> 19 14 20 <tr><td nowrap>Registrar delegation</td></tr> 15 <tr> 16 <td><TMPL_VAR NAME=ip></td> 17 <!-- fixme: find a way to "grey-ish" the IP exclude checkbox if any of the block exclude boxes are checked - note, we don't care about *disabling* it --> 18 <td><input type="checkbox" name="excludeip"<TMPL_IF ipexclude> checked="checked"</TMPL_IF>>Exclude<TMPL_IF NAME=nreports></td> 19 <td>(reported <TMPL_VAR NAME=nreports> time(s))</TMPL_IF></td> 20 <td><a href="<TMPL_VAR NAME=dnsblsiteroot>">Back</a></td></tr> 21 <tr><td colspan="4"><TMPL_VAR NAME=revinfo></td></tr> 22 23 <tr><td colspan="4"></td></tr> 24 <tr> 25 <td nowrap>Registrar delegation</td> 26 <td><input type="checkbox" name="exclude0"<TMPL_IF excl0> checked="checked"</TMPL_IF>>Exclude</td> 27 <td>Comment: <input name="comment0" value="<TMPL_VAR NAME=comment0 ESCAPE=HTML>"></td> 28 </tr> 21 29 <tr<TMPL_IF autob0> class="auto0"</TMPL_IF>> 22 <td><span class="<TMPL_ IF listb0>b0list</TMPL_IF>">Netblock:</span></td>23 <td colspan= 2><input name=block0 value="<TMPL_VAR block0>" size=40></td>30 <td><span class="<TMPL_VAR flag0>">Netblock:</span></td> 31 <td colspan="3"><input name=block0 value="<TMPL_VAR block0>" size=40></td> 24 32 </tr> 25 33 <tr<TMPL_IF autob0> class="auto0"</TMPL_IF>> 26 34 <td><span class="<TMPL_IF listorg0>b0org</TMPL_IF>">Org/Person:</span></td> 27 <td colspan= 2><input name=org0 value="<TMPL_VAR org0 ESCAPE=HTML>" size=40></td>35 <td colspan="3"><input name=org0 value="<TMPL_VAR org0 ESCAPE=HTML>" size=40></td> 28 36 </tr> 29 37 30 <tr><td>1st subdelegation</td></tr> 38 <tr><td colspan="4"></td></tr> 39 <tr> 40 <td>1st subdelegation</td> 41 <td><input type="checkbox" name="exclude1"<TMPL_IF excl1> checked="checked"</TMPL_IF>>Exclude</td> 42 <td>Comment: <input name="comment1" value="<TMPL_VAR NAME=comment1 ESCAPE=HTML>"></td> 43 </tr> 31 44 <tr<TMPL_IF autob1> class="auto1"</TMPL_IF>> 32 <td><span class="<TMPL_ IF listb1>b1list</TMPL_IF>">Netblock:</span></td>33 <td colspan= 2><input name=block1 value="<TMPL_VAR block1>" size=40></td>45 <td><span class="<TMPL_VAR flag1>">Netblock:</span></td> 46 <td colspan="3"><input name=block1 value="<TMPL_VAR block1>" size=40></td> 34 47 </tr> 35 48 <tr<TMPL_IF autob1> class="auto1"</TMPL_IF>> 36 49 <td><span class="<TMPL_IF listorg1>b1org</TMPL_IF>">Org/Person:</span></td> 37 <td colspan= 2><input name=org1 value="<TMPL_VAR org1 ESCAPE=HTML>" size=40></td>50 <td colspan="3"><input name=org1 value="<TMPL_VAR org1 ESCAPE=HTML>" size=40></td> 38 51 </tr> 39 52 40 <tr><td>2nd subdelegation</td></tr> 53 <tr><td colspan="4"></td></tr> 54 <tr> 55 <td>2nd subdelegation</td> 56 <td><input type="checkbox" name="exclude2"<TMPL_IF excl2> checked="checked"</TMPL_IF>>Exclude</td> 57 <td>Comment: <input name="comment2" value="<TMPL_VAR NAME=comment2 ESCAPE=HTML>"></td> 58 </tr> 41 59 <tr<TMPL_IF autob2> class="auto2"</TMPL_IF>> 42 <td><span class="<TMPL_ IF listb2>b2list</TMPL_IF>">Netblock:</span></td>43 <td colspan= 2><input name=block2 value="<TMPL_VAR block2>" size=40></td>60 <td><span class="<TMPL_VAR flag2>">Netblock:</span></td> 61 <td colspan="3"><input name=block2 value="<TMPL_VAR block2>" size=40></td> 44 62 </tr> 45 63 <tr<TMPL_IF autob2> class="auto2"</TMPL_IF>> 46 64 <td><span class="<TMPL_IF listorg2>b2org</TMPL_IF>">Org/Person:</span></td> 47 <td colspan= 2><input name=org2 value="<TMPL_VAR org2 ESCAPE=HTML>" size=40></td>65 <td colspan="3"><input name=org2 value="<TMPL_VAR org2 ESCAPE=HTML>" size=40></td> 48 66 </tr> 49 67 50 <tr><td>3rd subdelegation</td></tr> 68 <tr><td colspan="4"></td></tr> 69 <tr> 70 <td>3rd subdelegation</td> 71 <td><input type="checkbox" name="exclude3"<TMPL_IF excl3> checked="checked"</TMPL_IF>>Exclude</td> 72 <td>Comment: <input name="comment3" value="<TMPL_VAR NAME=comment3 ESCAPE=HTML>"></td> 73 </tr> 51 74 <tr<TMPL_IF autob3> class="auto3"</TMPL_IF>> 52 <td><span class="<TMPL_ IF listb3>b3list</TMPL_IF>">Netblock:</span></td>53 <td colspan= 2><input name=block3 value="<TMPL_VAR block3>" size=40></td>75 <td><span class="<TMPL_VAR flag3>">Netblock:</span></td> 76 <td colspan="3"><input name=block3 value="<TMPL_VAR block3>" size=40></td> 54 77 </tr> 55 78 <tr<TMPL_IF autob3> class="auto3"</TMPL_IF>> 56 79 <td><span class="<TMPL_IF listorg3>b3org</TMPL_IF>">Org/Person:</span></td> 57 <td colspan= 2><input name=org3 value="<TMPL_VAR org3 ESCAPE=HTML>" size=40></td>80 <td colspan="3"><input name=org3 value="<TMPL_VAR org3 ESCAPE=HTML>" size=40></td> 58 81 </tr> 59 82 60 <tr><td>4th subdelegation</td></tr> 83 <tr><td colspan="4"></td></tr> 84 <tr> 85 <td>4th subdelegation</td> 86 <td><input type="checkbox" name="exclude4"<TMPL_IF excl4> checked="checked"</TMPL_IF>>Exclude</td> 87 <td>Comment: <input name="comment4" value="<TMPL_VAR NAME=comment4 ESCAPE=HTML>"></td> 88 </tr> 61 89 <tr<TMPL_IF autob4> class="auto4"</TMPL_IF>> 62 <td><span class="<TMPL_ IF listb4>b4list</TMPL_IF>">Netblock:</span></td>63 <td colspan= 2><input name=block4 value="<TMPL_VAR block4>" size=40></td>90 <td><span class="<TMPL_VAR flag4>">Netblock:</span></td> 91 <td colspan="3"><input name=block4 value="<TMPL_VAR block4>" size=40></td> 64 92 </tr> 65 93 <tr<TMPL_IF autob4> class="auto4"</TMPL_IF>> 66 94 <td><span class="<TMPL_IF listorg4>b4org</TMPL_IF>">Org/Person:</span></td> 67 <td colspan= 2><input name=org4 value="<TMPL_VAR org4 ESCAPE=HTML>" size=40></td>95 <td colspan="3"><input name=org4 value="<TMPL_VAR org4 ESCAPE=HTML>" size=40></td> 68 96 </tr> 69 97
Note:
See TracChangeset
for help on using the changeset viewer.