Changeset 372 for trunk/tiny-import.pl


Ignore:
Timestamp:
08/01/12 18:19:03 (12 years ago)
Author:
Kris Deugau
Message:

/trunk

Checkpoint adding location/view support. See #10.

  • minor location list template tweak
  • extend importer to deal with locations on records, and location definitions
  • extend exporter to handle locations

Also:

  • minor SQL error-log cleanup (boolean types use 'y'/'n' or 'true'/'false'). See #25, sort of
  • Fix handling of CNAME exports for reverse zones; the records look ugly but there's no simple way to autoconvert them to the template types on import
  • Fix lurking buglet in tabledef update; we're using a 4-char field for locations to allow for legacy uses.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tiny-import.pl

    r363 r372  
    6868  open FLAT, "<$flatfile";
    6969
    70   our $recsth = $dbh->prepare("INSERT INTO records (domain_id,rdns_id,host,type,val,distance,weight,port,ttl) ".
    71         " VALUES (?,?,?,?,?,?,?,?,?)");
     70  our $recsth = $dbh->prepare("INSERT INTO records (domain_id,rdns_id,host,type,val,distance,weight,port,ttl,location) ".
     71        " VALUES (?,?,?,?,?,?,?,?,?,?)");
    7272
    7373  my %deleg;
     
    7777    next if /^\s*$/;
    7878    chomp;
     79    s/\s*$//;
    7980    recslurp($_);
    8081  }
     
    187188      my ($rparent) = $dbh->selectrow_array("SELECT rdns_id FROM revzones WHERE revnet >> ?", undef, ($ip));
    188189      if ($fparent && $rparent) {
    189         $recsth->execute($fparent, $rparent, $host, 65280, $ip, 0, 0, 0, $ttl);
     190        $recsth->execute($fparent, $rparent, $host, 65280, $ip, 0, 0, 0, $ttl, $loc);
    190191      } else {
    191192        push @deferred, $rec unless $nodefer;
     
    207208        ($code,$msg) = DNSDB::_zone2cidr($host);
    208209        my ($rparent) = $dbh->selectrow_array("SELECT rdns_id FROM revzones WHERE revnet >> ?", undef, ($msg));
    209         $recsth->execute(0, $rparent, $targ, 5, $msg->addr, 0, 0, 0, $ttl);
     210        $recsth->execute(0, $rparent, $targ, 5, $msg->addr, 0, 0, 0, $ttl, $loc);
    210211
    211212##fixme:  automagically convert manually maintained sub-/24 delegations
     
    218219        my $fparent = DNSDB::_hostparent($dbh, $host);
    219220        if ($fparent) {
    220           $recsth->execute($fparent, 0, $host, 5, $targ, 0, 0, 0, $ttl);
     221          $recsth->execute($fparent, 0, $host, 5, $targ, 0, 0, 0, $ttl, $loc);
    221222        } else {
    222223          push @deferred, $rec unless $nodefer;
     
    245246#       if !$rparent;
    246247        if ($rparent) {
    247           $recsth->execute(0, $rparent, $ns, 2, $msg, 0, 0, 0, $ttl);
     248          $recsth->execute(0, $rparent, $ns, 2, $msg, 0, 0, 0, $ttl, $loc);
    248249        } else {
    249250          push @deferred, $rec unless $nodefer;
     
    252253        my $fparent = DNSDB::_hostparent($dbh, $zone);
    253254        if ($fparent) {
    254           $recsth->execute($fparent, 0, $zone, 2, $ns, 0, 0, 0, $ttl);
    255           $recsth->execute($fparent, 0, $ns, 2, $ip, 0, 0, 0, $ttl) if $ip;
     255          $recsth->execute($fparent, 0, $zone, 2, $ns, 0, 0, 0, $ttl, $loc);
     256          $recsth->execute($fparent, 0, $ns, 2, $ip, 0, 0, 0, $ttl, $loc) if $ip;
    256257        } else {
    257258          push @deferred, $rec unless $nodefer;
     
    283284      }
    284285      if ($rparent) {
    285         $recsth->execute(0, $rparent, $host, 12, $msg->addr, 0, 0, 0, $ttl);
     286        $recsth->execute(0, $rparent, $host, 12, $msg->addr, 0, 0, 0, $ttl, $loc);
    286287      } else {
    287288        push @deferred, $rec unless $nodefer;
     
    302303      my $domid = DNSDB::_hostparent($dbh, $host);
    303304      if ($domid) {
    304         $recsth->execute($domid, 0, $host, 1, $ip, 0, 0, 0, $ttl);
     305        $recsth->execute($domid, 0, $host, 1, $ip, 0, 0, 0, $ttl, $loc);
    305306      } else {
    306307        push @deferred, $rec unless $nodefer;
     
    323324        $dbh->do("INSERT INTO revzones (revnet,group_id,status) VALUES (?,1,1)", undef, ($msg));
    324325        my ($rdns) = $dbh->selectrow_array("SELECT currval('revzones_rdns_id_seq')");
    325         $recsth->execute(0, $rdns, "$contact:$master", 6, "$refresh:$retry:$expire:$minttl", 0, 0, 0, $ttl);
     326        $recsth->execute(0, $rdns, "$contact:$master", 6, "$refresh:$retry:$expire:$minttl", 0, 0, 0, $ttl, $loc);
    326327      } else {
    327328        $dbh->do("INSERT INTO domains (domain,group_id,status) VALUES (?,1,1)", undef, ($zone));
    328329        my ($domid) = $dbh->selectrow_array("SELECT currval('domains_domain_id_seq')");
    329         $recsth->execute($domid, 0, "$contact:$master", 6, "$refresh:$retry:$expire:$minttl", 0, 0, 0, $ttl);
     330        $recsth->execute($domid, 0, "$contact:$master", 6, "$refresh:$retry:$expire:$minttl", 0, 0, 0, $ttl, $loc);
    330331      }
    331332
     
    350351      my $domid = DNSDB::_hostparent($dbh, $zone);
    351352      if ($domid) {
    352         $recsth->execute($domid, 0, $zone, 15, $host, $dist, 0, 0, $ttl);
    353         $recsth->execute($domid, 0, $host, 1, $ip, 0, 0, 0, $ttl) if $ip;
     353        $recsth->execute($domid, 0, $zone, 15, $host, $dist, 0, 0, $ttl, $loc);
     354        $recsth->execute($domid, 0, $host, 1, $ip, 0, 0, 0, $ttl, $loc) if $ip;
    354355      } else {
    355356        push @deferred, $rec unless $nodefer;
     
    371372        ($code,$msg) = DNSDB::_zone2cidr($fqdn);
    372373        my ($rparent) = $dbh->selectrow_array("SELECT rdns_id FROM revzones WHERE revnet >> ?", undef, ($msg));
    373         $recsth->execute(0, $rparent, $rdata, 16, "$msg", 0, 0, 0, $ttl);
     374        $recsth->execute(0, $rparent, $rdata, 16, "$msg", 0, 0, 0, $ttl, $loc);
    374375      } else {
    375376        my $domid = DNSDB::_hostparent($dbh, $fqdn);
    376377        if ($domid) {
    377           $recsth->execute($domid, 0, $fqdn, 16, $rdata, 0, 0, 0, $ttl);
     378          $recsth->execute($domid, 0, $fqdn, 16, $rdata, 0, 0, 0, $ttl, $loc);
    378379        } else {
    379380          push @deferred, $rec unless $nodefer;
     
    402403          ($rdns) = $dbh->selectrow_array("SELECT currval('revzones_rdns_id_seq')");
    403404# this would probably make a lot more sense to do hostmaster.$config{admindomain}
    404           $recsth->execute(0, $rdns, "hostmaster.$fqdn:$ns", 6, "16384:2048:1048576:2560", 0, 0, 0, "2560");
    405         }
    406         $recsth->execute(0, $rdns, $ns, 2, "$msg", 0, 0, 0, $ttl);
     405          $recsth->execute(0, $rdns, "hostmaster.$fqdn:$ns", 6, "16384:2048:1048576:2560", 0, 0, 0, "2560", $loc);
     406        }
     407        $recsth->execute(0, $rdns, $ns, 2, "$msg", 0, 0, 0, $ttl, $loc);
    407408##fixme:  (?)  implement full conversion of tinydns . records?
    408409# -> problem:  A record for NS must be added to the appropriate *forward* zone, not the reverse
     
    420421          $dbh->do("INSERT INTO domains (domain,group_id,status) VALUES (?,1,1)", undef, ($fqdn));
    421422          ($domid) = $dbh->selectrow_array("SELECT currval('domains_domain_id_seq')");
    422           $recsth->execute($domid, 0, "hostmaster.$fqdn:$ns", 6, "16384:2048:1048576:2560", 0, 0, 0, "2560");
    423         }
    424         $recsth->execute($domid, 0, $fqdn, 2, $ns, 0, 0, 0, $ttl);
    425         $recsth->execute($domid, 0, $ns, 1, $ip, 0, 0, 0, $ttl) if $ip;
     423          $recsth->execute($domid, 0, "hostmaster.$fqdn:$ns", 6, "16384:2048:1048576:2560", 0, 0, 0, "2560", $loc);
     424        }
     425        $recsth->execute($domid, 0, $fqdn, 2, $ns, 0, 0, 0, $ttl, $loc);
     426        $recsth->execute($domid, 0, $ns, 1, $ip, 0, 0, 0, $ttl, $loc) if $ip;
    426427      }
    427428
     
    429430    } elsif ($rec =~ /^\%/) {
    430431      $cnt{VIEWS}++;
     432
     433      # unfortunate that we don't have a guaranteed way to get a description on these.  :/
     434      my ($loc,$cnet) = split /:/, $rec, 2;
     435      $loc =~ s/^\%//;
     436      if (my ($iplist) = $dbh->selectrow_array("SELECT iplist FROM locations WHERE location = ?", undef, ($loc))) {
     437        if ($cnet) {
     438          $iplist .= ",$cnet";
     439          $dbh->do("UPDATE locations SET iplist = ? WHERE location = ?", undef, ($iplist, $loc));
     440        } else {
     441          # hmm.  spit out a warning?  if we already have entries for $loc, adding a null
     442          # entry will almost certainly Do The Wrong Thing(TM)
     443        }
     444      } else {
     445        $cnet = '' if !$cnet;   # de-nullify
     446        $dbh->do("INSERT INTO locations (location,iplist,description) VALUES (?,?,?)", undef, ($loc, $cnet, $loc));
     447      }
    431448
    432449    } elsif ($rec =~ /^:/) {
     
    471488        my $domid = DNSDB::_hostparent($dbh, $fqdn);
    472489        if ($domid) {
    473           $recsth->execute($domid, 0, $fqdn, 33, $target, $prio, $weight, $port, $ttl) if $domid;
     490          $recsth->execute($domid, 0, $fqdn, 33, $target, $prio, $weight, $port, $ttl, $loc) if $domid;
    474491        } else {
    475492          push @deferred, $rec unless $nodefer;
     
    488505        my $fparent = DNSDB::_hostparent($dbh, $fqdn);
    489506        if ($fparent) {
    490           $recsth->execute($fparent, 0, $fqdn, 28, $val->addr, 0, 0, 0, $ttl);
     507          $recsth->execute($fparent, 0, $fqdn, 28, $val->addr, 0, 0, 0, $ttl, $loc);
    491508        } else {
    492509          push @deferred, $rec unless $nodefer;
     
    501518          my ($rparent) = $dbh->selectrow_array("SELECT rdns_id FROM revzones WHERE revnet >> ?", undef, ($msg));
    502519          if ($rparent) {
    503             $recsth->execute(0, $rparent, $txtstring, 16, "$msg", 0, 0, 0, $ttl);
     520            $recsth->execute(0, $rparent, $txtstring, 16, "$msg", 0, 0, 0, $ttl, $loc);
    504521          } else {
    505522            push @deferred, $rec unless $nodefer;
     
    508525          my $domid = DNSDB::_hostparent($dbh, $fqdn);
    509526          if ($domid) {
    510             $recsth->execute($domid, 0, $fqdn, 16, $txtstring, 0, 0, 0, $ttl);
     527            $recsth->execute($domid, 0, $fqdn, 16, $txtstring, 0, 0, 0, $ttl, $loc);
    511528          } else {
    512529            push @deferred, $rec unless $nodefer;
     
    527544          my ($rparent) = $dbh->selectrow_array("SELECT rdns_id FROM revzones WHERE revnet >> ?", undef, ($msg));
    528545          if ($rparent) {
    529             $recsth->execute(0, $rparent, "$email $txtrec", 17, "$msg", 0, 0, 0, $ttl);
     546            $recsth->execute(0, $rparent, "$email $txtrec", 17, "$msg", 0, 0, 0, $ttl, $loc);
    530547          } else {
    531548            push @deferred, $rec unless $nodefer;
     
    534551          my $domid = DNSDB::_hostparent($dbh, $fqdn);
    535552          if ($domid) {
    536             $recsth->execute($domid, 0, $fqdn, 17, "$email $txtrec", 0, 0, 0, $ttl);
     553            $recsth->execute($domid, 0, $fqdn, 17, "$email $txtrec", 0, 0, 0, $ttl, $loc);
    537554          } else {
    538555            push @deferred, $rec unless $nodefer;
     
    549566        my $domid = DNSDB::_hostparent($dbh, $fqdn);
    550567        if ($domid) {
    551           $recsth->execute($domid, 0, $fqdn, 44, $sshfp, 0, 0, 0, $ttl);
     568          $recsth->execute($domid, 0, $fqdn, 44, $sshfp, 0, 0, 0, $ttl, $loc);
    552569        } else {
    553570          push @deferred, $rec unless $nodefer;
Note: See TracChangeset for help on using the changeset viewer.