Advertisement
Guest User

Untitled

a guest
May 24th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.43 KB | None | 0 0
  1. -- ------------------------------------
  2. CREATE OR REPLACE FUNCTION extractDnsInfo() RETURNS TRIGGER AS $BODY$
  3. my $host = $_TD->{new}{hostname};
  4. my @subdomains = split(/\./,$host);
  5.  
  6. my $sz = scalar(@subdomains) - 1; # we don't want the TLD
  7.  
  8. print "SUBDOMAINS: $hostname($sz)\n";
  9. for(my $i=0;$i<$sz;$i++){
  10. my $subdomain = '';
  11.  
  12. # pack subdomain to test
  13. for(my $j=$i;$j<$sz;$j++){
  14. $subdomain .= @subdomains[$j] . '.';
  15. }
  16.  
  17. $subdomain .=$subdomains[$sz];
  18.  
  19. spi_exec_query("SELECT COUNT(*) as c FROM domain WHERE name='" . $subdomain . "'");
  20.  
  21. if($rv->{rows}[1]->{c} == 0){
  22.  
  23. spi_exec_query("INSERT INTO domain (name) VALUES ('". $dnsname ."')");
  24.  
  25. #TODO: AXFR time!
  26. my %hosts;
  27.  
  28. foreach my $dns_server (`dig ns $dnsname`){
  29. if($dns_server=~m/^\S+\s+\d+\s+IN\s+NS\s+(\S+)\.$/){
  30. print STDERR "[AXFR: $1]\n";
  31.  
  32. foreach my $RR (split(/\n/,`dig \@$1 axfr $dnsname`)){
  33. if($RR=~m/^(\S+)\.\s+\d+\s+IN\s+A\s+(\S+)$/){
  34. if(!defined($hosts{$1})){
  35. $hosts{$1}=[$2];
  36. }
  37. elsif(@{$hosts{$1}}[0] ne $2){
  38. push(@{$hosts{$1}},$2);
  39. }
  40. }
  41. }
  42. }
  43. }
  44.  
  45. foreach my $newhost (keys(%hosts)){
  46. spi_exec_query("SELECT addhost('" .$newhost. "','". $hosts{$newhost} ."')");
  47. }
  48. }
  49. }
  50.  
  51. return;
  52. $BODY$ LANGUAGE 'plperlu';
  53.  
  54. --#########------------------------------------------------
  55. -- Triggers -----------------------------------------------
  56.  
  57. 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