Changeset 33 for trunk/DNSDB.pm
- Timestamp:
- 11/10/09 17:51:55 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/DNSDB.pm
r29 r33 15 15 use Exporter; 16 16 use DBI; 17 use Net::DNS; 17 18 #use Net::SMTP; 18 19 #use NetAddr::IP qw( Compact ); … … 811 812 812 813 814 ## DNSDB::importAXFR 815 # Import a domain via AXFR 816 sub importAXFR { 817 my $dbh = shift; 818 my $ifrom = shift; 819 my $domain = shift; 820 my $group = shift; 821 my $status = shift || 1; 822 my $rwsoa = shift || 0; 823 my $rwns = shift || 0; 824 ##fixme: add mode to delete&replace, merge+overwrite, merge new? 825 826 my $res = Net::DNS::Resolver->new; 827 $res->axfr_start($domain); 828 my $nrecs = 0; 829 my $flags = 0; 830 831 # Allow transactions, and raise an exception on errors so we can catch it later. 832 # Use local to make sure these get "reset" properly on exiting this block 833 local $dbh->{AutoCommit} = 0; 834 local $dbh->{RaiseError} = 1; 835 836 eval { 837 # can't do this, can't nest transactions. sigh. 838 #my ($dcode, $dmsg) = addDomain($dbh, $domain, $group, $status); 839 840 ##fixme: serial 841 my $sth = $dbh->prepare("INSERT INTO domains (domain,group_id,status) VALUES (?,?,?)"); 842 $sth->execute($domain,$group,$state); 843 844 # get domain id so we can do the records 845 $sth = $dbh->prepare("select domain_id from domains where domain='$domain'"); 846 $sth->execute; 847 ($dom_id) = $sth->fetchrow_array(); 848 849 while (my $rr = $res->axfr_next) { 850 my $type = $rr->type; 851 # nasty big ugly case-like thing here, since we have to do *some* different 852 # processing depending on the record. le sigh. 853 my $sql = "INSERT INTO records (domain_id,host,type,val,ttl"; 854 my $vallen = "?,?,?,?,?"; 855 my $host,$val; 856 857 ##work 858 # gnnnnnh. going to need to (rr->string) -> split -> <localvars> 859 my @vallist; 860 if ($type eq 'SOA') { 861 $host = $rr->mname.":".$rr->rname; 862 $val = $rr->refresh.":".$rr->retry.":".$rr->expire.":".$rr->minimum; 863 } 864 if ($type eq 'MX' || $type eq 'SRV') { 865 $sql .= ",distance"; 866 $vallen .= ",?"; 867 $sql .= ",weight,port" if $type eq 'SRV'; 868 $vallen .= ",?,?" if $type eq 'SRV'; 869 } 870 $sth = $dbh->prepare($sql.") VALUES (".$vallen.")"); 871 $sth->execute(@vallist); 872 873 #print $rr->rdata."\n"; 874 } 875 }; 876 877 if ($@) { 878 my $msg = $@; 879 eval { $dbh->rollback; }; 880 return ('FAIL',$msg); 881 } else { 882 return ('OK',"ook"); 883 } 884 885 return ('WARN'," 886 } # end importAXFR() 887 888 813 889 # shut Perl up 814 890 1;
Note:
See TracChangeset
for help on using the changeset viewer.