Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- ------------------------------------
- CREATE OR REPLACE FUNCTION extractDnsInfo() RETURNS TRIGGER AS $BODY$
- my $host = $_TD->{new}{hostname};
- my @subdomains = split(/\./,$host);
- my $sz = scalar(@subdomains) - 1; # we don't want the TLD
- print "SUBDOMAINS: $hostname($sz)\n";
- for(my $i=0;$i<$sz;$i++){
- my $subdomain = '';
- # pack subdomain to test
- for(my $j=$i;$j<$sz;$j++){
- $subdomain .= @subdomains[$j] . '.';
- }
- $subdomain .=$subdomains[$sz];
- spi_exec_query("SELECT COUNT(*) as c FROM domain WHERE name='" . $subdomain . "'");
- if($rv->{rows}[1]->{c} == 0){
- spi_exec_query("INSERT INTO domain (name) VALUES ('". $dnsname ."')");
- #TODO: AXFR time!
- my %hosts;
- foreach my $dns_server (`dig ns $dnsname`){
- if($dns_server=~m/^\S+\s+\d+\s+IN\s+NS\s+(\S+)\.$/){
- print STDERR "[AXFR: $1]\n";
- foreach my $RR (split(/\n/,`dig \@$1 axfr $dnsname`)){
- if($RR=~m/^(\S+)\.\s+\d+\s+IN\s+A\s+(\S+)$/){
- if(!defined($hosts{$1})){
- $hosts{$1}=[$2];
- }
- elsif(@{$hosts{$1}}[0] ne $2){
- push(@{$hosts{$1}},$2);
- }
- }
- }
- }
- }
- foreach my $newhost (keys(%hosts)){
- spi_exec_query("SELECT addhost('" .$newhost. "','". $hosts{$newhost} ."')");
- }
- }
- }
- return;
- $BODY$ LANGUAGE 'plperlu';
- --#########------------------------------------------------
- -- Triggers -----------------------------------------------
- CREATE TRIGGER trig_after_insert_hosts AFTER INSERT ON hosts FOR EACH ROW EXECUTE PROCEDURE extractDnsInfo();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement