Ignore:
Timestamp:
12/11/13 15:31:44 (10 years ago)
Author:
Kris Deugau
Message:

/branches/stable

Merge reverse DNS work from /trunk, 3 of mumble.

Includes changes through r440. One minor conflict
due to old partial merge

Location:
branches/stable
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/stable

  • branches/stable/DNSDB.pm

    r545 r546  
    30743074
    30753075## DNSDB::updateLoc()
     3076# Update details of a location.
     3077# Takes a database handle, location ID, group ID, short description,
     3078# long comments/notes, and comma/space-separated IP list
     3079# Returns a result code and message
    30763080sub updateLoc {
    30773081  my $dbh = shift;
     
    31163120
    31173121## DNSDB::delLoc()
    3118 sub delLoc {}
     3122sub delLoc {
     3123  my $dbh = shift;
     3124  my $loc = shift;
     3125
     3126  # Allow transactions, and raise an exception on errors so we can catch it later.
     3127  # Use local to make sure these get "reset" properly on exiting this block
     3128  local $dbh->{AutoCommit} = 0;
     3129  local $dbh->{RaiseError} = 1;
     3130
     3131  my $oldloc = getLoc($dbh, $loc);
     3132  my $olddesc = ($oldloc->{description} ? $oldloc->{description} : $loc);
     3133  my $okmsg = "Deleted location ($olddesc, '".$oldloc->{iplist}."')";
     3134
     3135  eval {
     3136    # Check for records with this location first.  Deleting a location without deleting records
     3137    # tagged for that location will render them unpublished without other warning.
     3138    my ($r) = $dbh->selectrow_array("SELECT record_id FROM records WHERE location=? LIMIT 1", undef, ($loc) );
     3139    die "Records still exist in location $olddesc\n" if $r;
     3140    $dbh->do("DELETE FROM locations WHERE location=?", undef, ($loc) );
     3141    _log($dbh, entry => $okmsg);
     3142    $dbh->commit;
     3143  };
     3144  if ($@) {
     3145    my $msg = $@;
     3146    eval { $dbh->rollback; };
     3147    if ($config{log_failures}) {
     3148      _log($dbh, (entry => "Failed to delete location ($olddesc, '$oldloc->{iplist}'): $msg"));
     3149      $dbh->commit;
     3150    }
     3151    return ('FAIL', "Failed to delete location ($olddesc, '$oldloc->{iplist}'): $msg");
     3152  }
     3153
     3154  return ('OK',$okmsg);
     3155} # end delLoc()
    31193156
    31203157
    31213158## DNSDB::getLoc()
     3159# Get details about a location/view
     3160# Takes a database handle and location ID.
     3161# Returns a reference to a hash containing the group ID, IP list, description, and comments/notes
    31223162sub getLoc {
    31233163  my $dbh = shift;
     
    33253365  my $id = shift;
    33263366
    3327   my $sql = "SELECT record_id,host,type,val,ttl,location".($revrec eq 'n' ? ',distance,weight,port' : '').
     3367  my $sql = "SELECT record_id,host,type,val,ttl".
     3368        ($defrec eq 'n' ? ',location' : '').
     3369        ($revrec eq 'n' ? ',distance,weight,port' : '').
    33283370        (($defrec eq 'y') ? ',group_id FROM ' : ',domain_id,rdns_id FROM ').
    33293371        _rectable($defrec,$revrec)." WHERE record_id=?";
     
    34003442  $sql .= "WHERE "._recparent($args{defrec},$args{revrec})." = ?";
    34013443  $sql .= " AND NOT r.type=$reverse_typemap{SOA}";
    3402   $sql .= " AND host ~* ?" if $args{filter};
     3444  $sql .= " AND (r.host ~* ? OR r.val ~* ?)" if $args{filter};
    34033445  $sql .= " ORDER BY $args{sortby} $args{sortorder}";
    34043446  # ensure consistent ordering by sorting on record_id too
     
    34073449
    34083450  my @bindvars = ($args{id});
    3409   push @bindvars, $args{filter} if $args{filter};
     3451  push @bindvars, ($args{filter},$args{filter}) if $args{filter};
    34103452
    34113453  my $ret = $dbh->selectall_arrayref($sql, { Slice => {} }, (@bindvars) );
     
    35483590  $logdata{entry} .= " [priority $dist] [weight $weight] [port $port]"
    35493591        if $typemap{$$rectype} eq 'SRV';
    3550   $logdata{entry} .= "', TTL $ttl, location $location";
     3592  $logdata{entry} .= "', TTL $ttl";
     3593  $logdata{entry} .= ", location ".getLoc($dbh, $location)->{description} if $location;
    35513594
    35523595  # Allow transactions, and raise an exception on errors so we can catch it later.
     
    37093752  $logdata{entry} .= " [priority $oldrec->{distance}] [weight $oldrec->{weight}] [port $oldrec->{port}]"
    37103753        if $typemap{$oldrec->{type}} eq 'SRV';
    3711   $logdata{entry} .= "', TTL $oldrec->{ttl}, location $oldrec->{location}\nto\n";
     3754  $logdata{entry} .= "', TTL $oldrec->{ttl}";
     3755  $logdata{entry} .= ", location ".getLoc($dbh, $oldrec->{location})->{description} if $oldrec->{location};
     3756  $logdata{entry} .= "\nto\n";
    37123757  # More NS special
    37133758  if ($revrec eq 'y' && $$rectype == 2) {
     
    37183763  $logdata{entry} .= " [distance $dist]" if $typemap{$$rectype} eq 'MX';
    37193764  $logdata{entry} .= " [priority $dist] [weight $weight] [port $port]" if $typemap{$$rectype} eq 'SRV';
    3720   $logdata{entry} .= "', TTL $ttl, location $location";
     3765  $logdata{entry} .= "', TTL $ttl";
     3766  $logdata{entry} .= ", location ".getLoc($dbh, $location)->{description} if $location;
    37213767
    37223768  local $dbh->{AutoCommit} = 0;
     
    37783824  $logdata{entry} .= " [priority $oldrec->{distance}] [weight $oldrec->{weight}] [port $oldrec->{port}]"
    37793825        if $typemap{$oldrec->{type}} eq 'SRV';
    3780   $logdata{entry} .= "', TTL $oldrec->{ttl}\n";
     3826  $logdata{entry} .= "', TTL $oldrec->{ttl}";
     3827  $logdata{entry} .= ", location ".getLoc($dbh, $oldrec->{location})->{description} if $oldrec->{location};
    37813828
    37823829  eval {
Note: See TracChangeset for help on using the changeset viewer.