Changeset 159 for branches/stable/cgi-bin/main.cgi
- Timestamp:
- 02/09/05 17:11:19 (20 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/cgi-bin/main.cgi
r158 r159 57 57 cleanInput(\%webvar); 58 58 59 # Stuff that gets loaded from the database60 #my @citylist;61 #my @poplist;62 #my %allocated; # Count for allocated blocks in a master block63 #my %free; # Count for free blocks (routed and unrouted) in a master block64 #my %bigfree; # Tracking largest free block in a master block65 #my %routed; # Number of routed blocks in a master block66 67 # Slurp up the master block list - we need this several places68 # While we're at it, initialize the related hashes.69 #$sth = $ip_dbh->prepare("select * from masterblocks order by cidr");70 #$sth->execute;71 #for (my $i=0; my @data = $sth->fetchrow_array(); $i++) {72 # $masterblocks[$i] = new NetAddr::IP $data[0];73 # $allocated{"$masterblocks[$i]"} = 0;74 # $free{"$masterblocks[$i]"} = 0;75 # $bigfree{"$masterblocks[$i]"} = 128; # Larger number means smaller block.76 # # Set to 128 to prepare for IPv677 # $routed{"$masterblocks[$i]"} = 0;78 #}79 80 81 82 59 83 60 #main() … … 110 87 # Thus the "routed" flag. 111 88 112 $sth = $ip_dbh->prepare("insert into freeblocks values ('$webvar{cidr}',".113 $cidr->masklen.",'<NULL>','n')");89 $sth = $ip_dbh->prepare("insert into freeblocks (cidr,maskbits,city,routed)". 90 " values ('$webvar{cidr}',".$cidr->masklen.",'<NULL>','n')"); 114 91 $sth->execute; 115 92 … … 349 326 # Fix up types from pools (which are single-char) 350 327 # Fixing the database would be... painful. :( 328 ##fixme LEGACY CODE 351 329 if ($data[2] =~ /^[cdsmw]$/) { 352 330 $data[2] .= 'i'; … … 355 333 $data[1], $disp_alloctypes{$data[2]}, $data[3], $data[4]); 356 334 # Allow listing of pool if desired/required. 357 if ($data[2] =~ /^ [cdsmw]p$/) {335 if ($data[2] =~ /^.[pd]$/) { 358 336 $row[0] .= ' <a href="/ip/cgi-bin/main.cgi?action=listpool'. 359 337 "&pool=$data[0]\">List IPs</a>"; … … 494 472 495 473 # Fetch only the blocks relevant to this master 496 $sth = $ip_dbh->prepare("select *from routed where cidr <<= '$master' order by cidr");474 $sth = $ip_dbh->prepare("select cidr,city from routed where cidr <<= '$master' order by cidr"); 497 475 $sth->execute(); 498 476 … … 505 483 $bigfree{"$cidr"} = 128; 506 484 # Retain the routing destination 507 $routed{"$cidr"} = $data[ 2];485 $routed{"$cidr"} = $data[1]; 508 486 } 509 487 … … 597 575 my $master = new NetAddr::IP $webvar{block}; 598 576 599 $sth = $ip_dbh->prepare("select *from routed where cidr='$master'");577 $sth = $ip_dbh->prepare("select city from routed where cidr='$master'"); 600 578 $sth->execute; 601 579 my @data = $sth->fetchrow_array; 602 580 603 581 print qq(<center><div class="heading">Summarizing allocated blocks for ). 604 qq($master ($data[ 2]):</div></center><br>\n);582 qq($master ($data[0]):</div></center><br>\n); 605 583 606 584 startTable('CIDR allocation','Customer Location','Type','CustID','Description/Name'); 607 585 608 586 # Snag the allocations for this block 609 $sth = $ip_dbh->prepare("select * from allocations where cidr <<= '$master' order by cidr"); 587 $sth = $ip_dbh->prepare("select cidr,city,type,custid,description". 588 " from allocations where cidr <<= '$master' order by cidr"); 610 589 $sth->execute(); 611 590 612 591 my $count=0; 613 592 while (my @data = $sth->fetchrow_array()) { 614 # cidr,c ustid,type,city,description,notes,maskbits,circuitid593 # cidr,city,type,custid,description, as per the SELECT 615 594 my $cidr = new NetAddr::IP $data[0]; 616 595 617 596 # Clean up extra spaces that are borking things. 618 $data[2] =~ s/\s+//g;597 # $data[2] =~ s/\s+//g; 619 598 620 599 my @row = ("<a href=\"/ip/cgi-bin/main.cgi?action=edit&block=$data[0]\">$data[0]</a>", 621 $data[ 3], $disp_alloctypes{$data[2]}, $data[1], $data[4]);600 $data[1], $disp_alloctypes{$data[2]}, $data[3], $data[4]); 622 601 # If the allocation is a pool, allow listing of the IPs in the pool. 623 if ($data[2] =~ /^ [cdsmw]p$/) {602 if ($data[2] =~ /^.[pd]$/) { 624 603 $row[0] .= ' <a href="/ip/cgi-bin/main.cgi?action=listpool'. 625 604 "&pool=$data[0]\">List IPs</a>"; … … 654 633 # unrouted free blocks, but it's better to let the database do the work if we can. 655 634 $count = 0; 656 $sth = $ip_dbh->prepare("select *from freeblocks where routed='y' and cidr <<= '$master' order by cidr");635 $sth = $ip_dbh->prepare("select cidr from freeblocks where routed='y' and cidr <<= '$master' order by cidr"); 657 636 $sth->execute(); 658 637 while (my @data = $sth->fetchrow_array()) { … … 676 655 my $cidr = new NetAddr::IP $webvar{pool}; 677 656 657 my ($pooltype,$poolcity); 658 678 659 # Snag pool info for heading 679 $sth = $ip_dbh->prepare("select *from allocations where cidr='$cidr'");660 $sth = $ip_dbh->prepare("select type,city from allocations where cidr='$cidr'"); 680 661 $sth->execute; 681 my @data = $sth->fetchrow_array;682 my $type = $data[2]; # We'll need this later.662 $sth->bind_columns(\$pooltype, \$poolcity); 663 $sth->fetch() || carp $sth->errstr; 683 664 684 665 print qq(<center><div class="heading">Listing pool IPs for $cidr<br>\n). 685 qq(($disp_alloctypes{$type} in $data[3])</div></center><br>\n); 686 print qq(<div class="indent"><b>Reserved IPs:</b><br>\n); 687 print qq(<div class="indent"><table><tr class=color1><td>Network IP:</td><td>). 666 qq(($disp_alloctypes{$pooltype} in $poolcity)</div></center><br>\n); 667 # Only display net/gw/bcast if it's a "real" netblock and not a PPP(oE) lunacy 668 if ($pooltype =~ /^.d$/) { 669 print qq(<div class="indent"><b>Reserved IPs:</b><br>\n); 670 print qq(<div class="indent"><table><tr class=color1><td>Network IP:</td><td>). 688 671 $cidr->addr."</td></tr>\n"; 689 $cidr++;690 print "<tr class=color2><td>Gateway:</td><td>".$cidr->addr."</td></tr>\n";691 $cidr--; $cidr--;692 print "<tr class=color1><td>Broadcast:</td><td>".$cidr->addr."</td></tr>\n".672 $cidr++; 673 print "<tr class=color2><td>Gateway:</td><td>".$cidr->addr."</td></tr>\n"; 674 $cidr--; $cidr--; 675 print "<tr class=color1><td>Broadcast:</td><td>".$cidr->addr."</td></tr>\n". 693 676 "<tr><td>Netmask:</td><td>".$cidr->mask."</td></tr>\n". 694 677 "</table></div></div>\n"; 678 } 695 679 696 680 # probably have to add an "edit IP allocation" link here somewhere. 697 681 698 682 startTable('IP','Customer ID','Available?','Description',''); 699 $sth = $ip_dbh->prepare("select * from poolips where pool='$webvar{pool}' order by ip"); 683 $sth = $ip_dbh->prepare("select ip,custid,available,description,type". 684 " from poolips where pool='$webvar{pool}' order by ip"); 700 685 $sth->execute; 701 686 my $count = 0; 702 687 while (my @data = $sth->fetchrow_array) { 703 688 # pool,ip,custid,city,ptype,available,notes,description,circuitid 704 # If desc is null, make it not null. <g> 705 if ($data[7] eq '') { 706 $data[7] = ' '; 689 # ip,custid,available,description,type 690 # If desc is "null", make it not null. <g> 691 if ($data[3] eq '') { 692 $data[3] = ' '; 707 693 } 708 694 # Some nice hairy Perl to decide whether to allow unassigning each IP 709 # -> if $data[ 5] (aka poolips.available) == 'n' then we print the unassign link695 # -> if $data[2] (aka poolips.available) == 'n' then we print the unassign link 710 696 # else we print a blank space 711 my @row = ( qq(<a href="/ip/cgi-bin/main.cgi?action=edit&block=$data[ 1]">$data[1]</a>),712 $data[ 2],$data[5],$data[7],713 ( ($data[ 5] eq 'n') ?714 ("<a href=\"/ip/cgi-bin/main.cgi?action=delete&block=$data[ 1]&".715 "alloctype=$data[4] i\">Unassign this IP</a>") :697 my @row = ( qq(<a href="/ip/cgi-bin/main.cgi?action=edit&block=$data[0]">$data[0]</a>), 698 $data[1],$data[2],$data[3], 699 ( ($data[2] eq 'n') ? 700 ("<a href=\"/ip/cgi-bin/main.cgi?action=delete&block=$data[0]&". 701 "alloctype=$data[4]\">Unassign this IP</a>") : 716 702 (" ") ) 717 703 ); … … 803 789 # + Different flavours of netblock 804 790 805 if ($webvar{alloctype} =~ /^ [cdsmw]i$/) {791 if ($webvar{alloctype} =~ /^.i$/) { 806 792 my ($base,undef) = split //, $webvar{alloctype}; # split into individual chars 807 793 my $sql; … … 810 796 # ... aside from #^%#$%#@#^%^^!!!! legacy data. GRRR. 811 797 # Note that we want to retain the requested city to relate to customer info. 798 ##fixme This needs thought. 799 ##SELECT DISTINCT pool, Count(*) FROM poolips where available='y' GROUP BY pool; 812 800 if ($base =~ /^[ds]$/) { 813 801 $sql = "select * from poolips where available='y' and". … … 863 851 ##fixme 864 852 # This section needs serious Pondering. 865 if ($webvar{alloctype} =~ /^ [cdsmw]p$/) {853 if ($webvar{alloctype} =~ /^.[pd]$/) { 866 854 if (($webvar{city} !~ /^(Sudbury|North Bay)$/) && ($webvar{alloctype} eq 'dp')) { 867 855 printError("You must chose Sudbury or North Bay for DSL pools."); … … 879 867 } 880 868 if ($webvar{allocfrom} ne '-') { 881 $sql = "select *from freeblocks where city='$city' and maskbits<=$webvar{maskbits}".869 $sql = "select cidr from freeblocks where city='$city' and maskbits<=$webvar{maskbits}". 882 870 " and cidr <<= '$webvar{allocfrom}' and routed='y' order by cidr,maskbits desc"; 883 871 } else { 884 $sql = "select *from freeblocks where city='$city' and maskbits<=$webvar{maskbits}".872 $sql = "select cidr from freeblocks where city='$city' and maskbits<=$webvar{maskbits}". 885 873 " and routed='y' order by cidr,maskbits desc"; 886 874 } … … 908 896 $cidr = $subblocks[0]; 909 897 } 910 } # if ($webvar{alloctype} =~ /^ [cdsmw]i$/)898 } # if ($webvar{alloctype} =~ /^.i$/) 911 899 912 900 open HTML, "../confirm.html" … … 974 962 "'$webvar{alloctype}' by $authuser failed: '$msg'"; 975 963 printError("Allocation of $webvar{fullcidr} as $disp_alloctypes{$webvar{alloctype}}". 976 " failed: 964 " failed:<br>\n$msg\n"); 977 965 } 978 966 … … 1083 1071 $data[2] =~ s/\s//; 1084 1072 1073 ##fixme LEGACY CODE 1085 1074 # Postfix "i" on pool IP types 1086 1075 if ($data[2] =~ /^[cdsmw]$/) { … … 1145 1134 # Relatively simple SQL transaction here. 1146 1135 my $sql; 1147 if (my $pooltype = ($webvar{alloctype} =~ /^( [cdsmw])i$/) ) {1136 if (my $pooltype = ($webvar{alloctype} =~ /^(.)i$/) ) { 1148 1137 $sql = "update poolips set custid='$webvar{custid}',notes='$webvar{notes}',". 1149 1138 "circuitid='$webvar{circid}',description='$webvar{desc}' ". … … 1154 1143 "type='$webvar{alloctype}',circuitid='$webvar{circid}' where cidr='$webvar{block}'"; 1155 1144 } 1156 syslog "debug", $sql; 1145 # Log the details of the change. 1146 syslog "debug", $sql; 1157 1147 $sth = $ip_dbh->prepare($sql); 1158 1148 $sth->execute; … … 1232 1222 $desc = "N/A"; 1233 1223 $notes = "N/A"; 1234 } elsif ($webvar{alloctype} =~ /^ [cdsmw]i$/) { # done with alloctype=rr1224 } elsif ($webvar{alloctype} =~ /^.i$/) { # done with alloctype=rr 1235 1225 1236 1226 # Unassigning a static IP … … 1245 1235 $alloctype .="i"; 1246 1236 1247 } else { # done with alloctype= [cdsmw]i1237 } else { # done with alloctype=~ /^.i$/ 1248 1238 1249 1239 my $sth = $ip_dbh->prepare("select cidr,custid,type,city,circuitid,description,notes from ". … … 1270 1260 1271 1261 # Set the warning text. 1272 if ($alloctype =~ /^ [cdsmw]p$/) {1262 if ($alloctype =~ /^.[pd]$/) { 1273 1263 $html =~ s|<!--warn-->|<tr bgcolor="black"><td colspan="2"><div class="red">Warning: clicking confirm will remove this record entirely.<br>Any IPs allocated from this pool will also be removed!</div></td></tr>|; 1274 1264 } else {
Note:
See TracChangeset
for help on using the changeset viewer.