Changeset 368 for branches/stable/cgi-bin/extras
- Timestamp:
- 11/26/07 17:54:21 (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/stable/cgi-bin/extras/db2rwhois.pl
r367 r368 50 50 closedir RWHOISROOT; 51 51 52 # prefetch alloctype data 53 my $sth = $dbh->prepare("select type,def_custid,arin_netname from alloctypes"); 54 $sth->execute; 55 while (my @data = $sth->fetchrow_array) { 56 $netnameprefix{$data[0]} = $data[2]; 57 } 58 59 # Get the list of masters to export 60 my $msth = $dbh->prepare("select cidr,ctime,mtime from masterblocks where rwhois='y'"); 61 $msth->execute; 62 63 # Prepare to select subblocks for each master 64 # Make sure to remove the private netblocks from this, 65 # no use or point in broadcasting our use of them. 66 # Also remove the details of our "reserved CORE/WAN" blocks; they're not critical. 67 my $ssth = $dbh->prepare("select cidr,custid,type,city,description,createstamp,modifystamp,swip ". 68 "from allocations where ". 69 "not (cidr <<= '192.168.0.0/16') and ". 70 "not (cidr <<= '172.16.0.0/12') and ". 71 "not (cidr <<= '10.0.0.0/8') and ". 72 "not (type = 'wr') and ". 73 "masklen(cidr) <=30 and ". 74 "cidr <<= ?"); 75 76 # Customer data, for those rare blocks we really need to delegate. 77 my $custsth = $dbh->prepare("select name,street,city,province,country,pocode,phone,tech_handle,special ". 78 "from customers where custid=?"); 79 52 80 # Fill in data about our master blocks as allocated from ARIN 53 81 # We open separate files for each of these as appropriate. 54 82 # Changes in master blocks are treated as complete new masters - since we're exporting 55 83 # all data every time, this isn't so terrible as it might seem. 56 my $sth = $dbh->prepare("select cidr,ctime,mtime from masterblocks where rwhois='y'");57 $sth->execute;58 84 my $i=0; 59 GETMASTERS: while (my @data = $sth->fetchrow_array()) {85 while (my @data = $msth->fetchrow_array()) { 60 86 61 87 $masterblocks[$i] = new NetAddr::IP $data[0]; … … 153 179 ); 154 180 155 # Whew! Ugly little varmint. 181 # Recreate the net-nnn.nnn.nnn.nnn-nn.txt data file 156 182 my $masterfilename = "$rwnet/data/network/$rwnet.txt"; 157 183 … … 174 200 "Updated-By: noc\@example.com\n"; 175 201 176 close MASTERFILE; 177 $i++; 178 } 179 180 # prefetch alloctype data 181 $sth = $dbh->prepare("select type,def_custid,arin_netname from alloctypes"); 182 $sth->execute; 183 while (my @data = $sth->fetchrow_array) { 184 $netnameprefix{$data[0]} = $data[2]; 185 } 186 187 # Now read out the data in the "main" delegation list, and check it 188 # with the master blocks. We need to do this to decide which rWHOIS 189 # "net-xxx.xxx.xxx.xxx-mask" tree the data belongs in. 190 191 # Make sure to remove the private netblocks from this. 192 # No use or point in broadcasting our use of them. 193 # Also remove the details of our "reserved CORE/WAN" blocks; they're not critical. 194 $sth = $dbh->prepare("select cidr,custid,type,city,description,createstamp,modifystamp,swip ". 195 "from allocations where ". 196 "not (cidr <<= '192.168.0.0/16') and ". 197 "not (cidr <<= '172.16.0.0/12') and ". 198 "not (cidr <<= '10.0.0.0/8') and ". 199 "not (type = 'wr') and ". 200 "masklen(cidr) <=30"); 201 #" and (custid='6750400' or custid like '%-RES' or custid like '%-BUS')"); 202 $sth->execute; 203 204 my $custsth = $dbh->prepare("select name,street,city,province,country,pocode,phone,tech_handle,special from customers where custid=?"); 205 206 $i=0; 207 while (my ($cidr, $custid, $type, $city, $desc, $ctime, $mtime, $swip) = $sth->fetchrow_array) { 202 # And now the subblocks 203 $ssth->execute("$masterblocks[$i]"); 204 while (my ($cidr, $custid, $type, $city, $desc, $ctime, $mtime, $swip) = $ssth->fetchrow_array) { 208 205 209 206 # We get master block info from @masterblocks. … … 220 217 # Updated-By: noc@example.com 221 218 222 # Get the "full" network number223 my $net = new NetAddr::IP $cidr;219 # Get the "full" network number 220 my $net = new NetAddr::IP $cidr; 224 221 225 222 # Assumptions: All data in ipdb is public 226 223 # If not, we need another field to indicate "public/private". 227 224 228 foreach my $master (@masterblocks) {229 if ($master->contains($net)) {230 231 # Whew! Ugly little varmint.232 my $masterfilename = "net-".$master->addr."-".$master->masklen.233 "/data/network/".$master->addr."-".$master->masklen.".txt";234 235 open MASTERFILE,">>$rwhoisDataPath/$masterfilename"236 or print "File open error: '$!' on '$rwhoisDataPath/$masterfilename'\n";237 238 225 # cidr custid type city description notes maskbits 239 226 … … 241 228 if ($desc =~ /^\s*$/) { $desc = 'Friendly ISP'; } 242 229 243 244 245 230 # Fix up datestamps. We don't *really* need sub-microsecond resolution on our exports... 231 ($ctime) = ($ctime =~ /^(\d+-\d+-\d+)\s+/); 232 ($mtime) = ($mtime =~ /^(\d+-\d+-\d+)\s+/); 246 233 247 234 # Notes: … … 262 249 # network:Class-Name:network [Provided by rWHOIS protocol] 263 250 264 my $netname = $netnameprefix{$type}; 265 266 if ($swip eq 'n') { 267 print MASTERFILE "---\nID: NETBLK-ISP.$master\n". 268 "Auth-Area: $master\n". 269 "Network-Name: $netname-".$net->network."\n". 270 "IP-Network: $net\n". 271 "IP-Network-Block: ".$net->range."\n". 272 "Org-Name: Friendly ISP\n". 273 "Street-Address: 123 4th Street\n". 274 "City: Anytown\n". 275 "StateProv: Ontario\n". 276 "Postal-Code: H0H 0H0\n". 277 "Country-Code: CA\n". 278 "Tech-Contact: ISP-ARIN-HANDLE\n". 279 "Created: $ctime\n". 280 "Updated: $mtime\n". 281 "Updated-By: noc\@example.com\n"; 251 my $netname = $netnameprefix{$type}; 252 253 if ($swip eq 'n') { 254 print MASTERFILE "---\nID: NETBLK-ISP.$masterblocks[$i]\n". 255 "Auth-Area: $masterblocks[$i]\n". 256 "Network-Name: $netname-".$net->network."\n". 257 "IP-Network: $net\n". 258 "IP-Network-Block: ".$net->range."\n". 259 "Org-Name: Friendly ISP\n". 260 "Street-Address: 123 4th Street\n". 261 "City: Anytown\n". 262 "StateProv: Ontario\n". 263 "Postal-Code: H0H 0H0\n". 264 "Country-Code: CA\n". 265 "Tech-Contact: ISP-ARIN-HANDLE\n". 266 "Created: $ctime\n". 267 "Updated: $mtime\n". 268 "Updated-By: noc\@example.com\n"; 269 } else { 270 $custsth->execute($custid); 271 my ($name, $street, $city, $prov, $country, $pocode, $phone, $tech, $special) = $custsth->fetchrow_array; 272 $custsth->finish; 273 if ($special && $special =~ /NetName/ && $special =~ /$cidr/) { 274 ($netname) = ($special =~ /NetName$cidr: ([A-Z0-9_-]+)/); 282 275 } else { 283 $custsth->execute($custid); 284 my ($name, $street, $city, $prov, $country, $pocode, $phone, $tech, $special) = $custsth->fetchrow_array; 285 $custsth->finish; 286 if ($special && $special =~ /NetName/ && $special =~ /$cidr/) { 287 ($netname) = ($special =~ /NetName$cidr: ([A-Z0-9_-]+)/); 288 } else { 289 $netname .= "-".$net->network; 290 } 291 print MASTERFILE "---\nID: NETBLK-ISP.$master\n". 292 "Auth-Area: $master\n". 293 "Network-Name: $netname\n". 294 "IP-Network: $net\n". 295 "IP-Network-Block: ".$net->range."\n". 296 "Org-Name: $name\n". 297 "Street-Address: $street\n". 298 "City: $city\n". 299 "StateProv: $prov\n". 300 "Postal-Code: $pocode\n". 301 "Country-Code: $country\n". 302 "Tech-Contact: $tech\n". 303 "Created: $ctime\n". 304 "Updated: $mtime\n". 305 "Updated-By: noc\@example.com\n"; 306 } # swip 307 308 } # net in master 309 } # foreach master 276 $netname .= "-".$net->network; 277 } 278 print MASTERFILE "---\nID: NETBLK-ISP.$masterblocks[$i]\n". 279 "Auth-Area: $masterblocks[$i]\n". 280 "Network-Name: $netname\n". 281 "IP-Network: $net\n". 282 "IP-Network-Block: ".$net->range."\n". 283 "Org-Name: $name\n". 284 "Street-Address: $street\n". 285 "City: $city\n". 286 "StateProv: $prov\n". 287 "Postal-Code: $pocode\n". 288 "Country-Code: $country\n". 289 "Tech-Contact: $tech\n". 290 "Created: $ctime\n". 291 "Updated: $mtime\n". 292 "Updated-By: noc\@example.com\n"; 293 } # swip 294 295 } # while $ssth->fetchrow_array() 296 297 close MASTERFILE; 310 298 311 299 $i++; 312 } # while fetchrow_array() 313 300 } # while $msth->fetchrow_array() 301 302 # Now we see if there's obsolete netdata directories to be deleted, 303 # and therefore an auth-area file to regenerate 314 304 foreach my $netdir (keys %rwhoisdirs) { 315 305 print "deleting obsolete directory $netdir...\n";
Note:
See TracChangeset
for help on using the changeset viewer.