Changeset 459 for trunk/DNSDB.pm


Ignore:
Timestamp:
01/22/13 17:24:43 (11 years ago)
Author:
Kris Deugau
Message:

/trunk

Flesh out last known subcases of record update/delete required
for IPDB RPC service. See #43.

  • Add new sub delByCIDR(). Requires new DNSDB::downconvert utility sub.
  • Use a new variable instead of overwriting $args{cidr} in addOrUpdateRevRec()
  • Catch and another special case - adding a /32 ("netblock" or static IP) at the very beginning of a larger block in addOrUpdateRevRec()
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/DNSDB.pm

    r457 r459  
    37963796  return ($retcode, $retmsg);
    37973797} # end updateRec()
     3798
     3799
     3800## DNSDB::downconvert()
     3801# A mostly internal (not exported) semiutilty sub to downconvert from pseudotype <x>
     3802# to a compatible component type.  Only a handful of operations are valid, anything
     3803# else is a null-op.
     3804# Takes the record ID and the new type.  Returns boolean.
     3805sub downconvert {
     3806  my $dbh = shift;
     3807  my $recid = shift;
     3808  my $newtype = shift;
     3809
     3810  # also, only work on live records;  little to no value trying to do this on default records.
     3811  my $rec = getRecLine($dbh, 'n', 'y', $recid);
     3812
     3813  # hm?
     3814  #return 1 if !$rec;
     3815
     3816  return 1 if $rec->{type} < 65000;     # Only the reverse-record pseudotypes can be downconverted
     3817  return 1 if $rec->{type} == 65282;    # Nowhere to go
     3818
     3819  my $delpar;
     3820  my @sqlargs;
     3821  if ($rec->{type} == 65280) {
     3822    return 1 if $newtype != 1 && $newtype != 12;
     3823    $delpar = ($newtype == 1 ? 'rdns_id' : 'domain_id');
     3824    push @sqlargs, 0, $newtype, $recid;
     3825  } elsif ($rec->{type} == 65281) {
     3826    return 1 if $newtype != 28 && $newtype != 12;
     3827    $delpar = ($newtype == 28 ? 'rdns_id' : 'domain_id');
     3828    push @sqlargs, 0, $newtype, $recid;
     3829  } elsif ($rec->{type} == 65283) {
     3830    return 1 if $newtype != 65282;
     3831    $delpar = 'rdns_id';
     3832  } elsif ($rec->{type} == 65284) {
     3833    return 1 if $newtype != 65282;
     3834    $delpar = 'rdns_id';
     3835  } else {
     3836    # Your llama is on fire.
     3837  }
     3838
     3839  local $dbh->{AutoCommit} = 0;
     3840  local $dbh->{RaiseError} = 1;
     3841
     3842  eval {
     3843    $dbh->do("UPDATE records SET $delpar = ?, type = ? WHERE record_id = ?", undef, @sqlargs);
     3844    $dbh->commit;
     3845  };
     3846  if ($@) {
     3847    $errstr = $@;
     3848    eval { $dbh->rollback; };
     3849    return 0;
     3850  }
     3851  return 1;
     3852} # end downconvert()
    37983853
    37993854
Note: See TracChangeset for help on using the changeset viewer.