Changeset 269


Ignore:
Timestamp:
03/07/12 15:47:14 (12 years ago)
Author:
Kris Deugau
Message:

/trunk

addRDNS() complete except for handling $revpatt.
See #26

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/DNSDB.pm

    r265 r269  
    13521352    # get the ID...
    13531353    ($rdns_id) = $dbh->selectrow_array("SELECT currval('revzones_rdns_id_seq')");
    1354 #$dbh->selectrow_array("SELECT currval('users_user_id_seq')");
    13551354
    13561355    _log($dbh, (rdns_id => $rdns_id, user_id => $userinfo{id}, group_id => $group, username => $userinfo{name},
     
    13591358    # ... and now we construct the standard records from the default set.  NB:  group should be variable.
    13601359    my $sth = $dbh->prepare("SELECT host,type,val,ttl FROM default_rev_records WHERE group_id=?");
    1361     my $sth_in = $dbh->prepare("INSERT INTO records (rdns_id,host,type,val,ttl)".
    1362         " VALUES ($rdns_id,?,?,?,?)");
     1360    my $sth_in = $dbh->prepare("INSERT INTO records (rdns_id,domain_id,host,type,val,ttl)".
     1361        " VALUES ($rdns_id,?,?,?,?,?)");
    13631362    $sth->execute($group);
    13641363    while (my ($host,$type,$val,$ttl) = $sth->fetchrow_array()) {
     
    13691368        next if ($type == 65281 || $type == 65284);
    13701369      }
     1370
    13711371      $host =~ s/ADMINDOMAIN/$config{domain}/g;
    13721372
     
    13751375      # While we're at it, we substitute $zone for ZONE in the value.
    13761376      if ($val eq 'ZONE') {
     1377##fixme?  do we care if we have multiple whole-zone templates?
    13771378        $val = $zone->network;
    13781379      } elsif ($val =~ /ZONE/) {
    13791380        my $tmpval = $val;
    13801381        $tmpval =~ s/ZONE//;
     1382        # Bend the rules and allow single-trailing-number PTR or PTR template records to be inserted
     1383        # as either v4 or v6.  May make this an off-by-default config flag
     1384        # Note that the origin records that may trigger this **SHOULD** already have ZONE,\d
     1385        if ($type == 12 || $type == 65282) {
     1386          $tmpval =~ s/[,.]/::/ if ($tmpval =~ /^[,.]\d+$/ && $zone->{isv6});
     1387          $tmpval =~ s/[,:]+/./ if ($tmpval =~ /^(?:,|::)\d+$/ && !$zone->{isv6});
     1388        }
    13811389        my $addr;
    13821390        if (_ipparent($dbh, 'n', 'y', \$tmpval, $rdns_id, \$addr)) {
    13831391          $val = $addr->addr;
    13841392        } else {
    1385           $warnstr .= "Default record '$val $typemap{$type} $host' doesn't fit in $zone, skipping\n";
     1393          $warnstr .= "\nDefault record '$val $typemap{$type} $host' doesn't fit in $zone, skipping";
    13861394          next;
    13871395        }
     
    13911399      $host = _ZONE($zone, $host);
    13921400
    1393 ##work
    1394       $sth_in->execute($host,$type,$val,$ttl);
     1401      # Fill in the forward domain ID if we can find it, otherwise:
     1402      # Coerce type down to PTR or PTR template if we can't
     1403      my $domid = 0;
     1404      if ($type >= 65280) {
     1405        if (!($domid = _hostparent($dbh, $host))) {
     1406          $warnstr .= "\nRecord added as PTR instead of $typemap{$type};  domain not found for $host";
     1407          $type = $reverse_typemap{PTR};
     1408          $domid = 0;   # just to be explicit.
     1409        }
     1410      }
     1411
     1412      $sth_in->execute($domid,$host,$type,$val,$ttl);
     1413
    13951414      if ($typemap{$type} eq 'SOA') {
    13961415        my @tmp1 = split /:/, $host;
     
    14021421      } else {
    14031422        my $logentry = "[new $zone] Added record '$host $typemap{$type}";
    1404 #       $logentry .= " [distance $dist]" if $typemap{$type} eq 'MX';
    1405 #       $logentry .= " [priority $dist] [weight $weight] [port $port]" if $typemap{$type} eq 'SRV';
    1406         _log($dbh, (rdns_id => $rdns_id, user_id => $userinfo{id}, group_id => $group,
     1423        _log($dbh, (rdns_id => $rdns_id, domain_id => $domid, user_id => $userinfo{id}, group_id => $group,
    14071424                username => $userinfo{name}, entry =>
    14081425                $logentry." $val', TTL $ttl"));
    1409 #print $logentry." $val', TTL $ttl\n";
    14101426      }
    14111427    }
     1428
     1429# Generate record based on provided pattern. 
     1430        my $addr;
     1431        if (_ipparent($dbh, 'n', 'y', \$tmpval, $rdns_id, \$addr)) {
     1432          $val = $addr->addr;
     1433        } else {
     1434          $warnstr .= "\nDefault record '$val $typemap{$type} $host' doesn't fit in $zone, skipping";
     1435          next;
     1436        }
    14121437
    14131438    # If there are warnings (presumably about default records skipped for cause) log them
    14141439    _log($dbh, (rdns_id => $rdns_id, user_id => $userinfo{id}, group_id => $group,
    1415         username => $userinfo{name}, entry => $warnstr))
     1440        username => $userinfo{name}, entry => "Warning(s) adding $zone:$warnstr"))
    14161441        if $warnstr;
    1417 #print $warnstr;
     1442
    14181443    # once we get here, we should have suceeded.
    1419 #die "horribly\n";
    14201444    $dbh->commit;
    14211445  }; # end eval
  • trunk/dns.cgi

    r268 r269  
    445445  fill_grouplist("grouplist");
    446446
     447  # prepopulate revpatt with the matching default record
     448# getRecByName($dbh, (revrec => $webvar{revrec}, defrec => $webvar{defrec}, host => 'string'));
     449
    447450  if ($webvar{add_failed}) {
    448451    $page->param(add_failed => 1);
     
    472475  } else {
    473476    logaction(0, $session->param("username"), $webvar{group}, "Failed adding reverse zone $webvar{revzone} ($msg)");
    474     changepage(page => "newrevzone", add_failed => 1, revzone => $webvar{revzone}, revpatt => $webvar{revpatt},
    475       errmsg => $msg);
     477    changepage(page => "newrevzone", revrec => 'y', add_failed => 1, revzone => $webvar{revzone},
     478        revpatt => $webvar{revpatt}, errmsg => $msg);
    476479  }
    477480
  • trunk/notes

    r81 r269  
    309309#define LOG_INFO        6       /* informational */
    310310#define LOG_DEBUG       7       /* debug-level messages */
     311
     312
     313
     314another web-UI for DNS record maintenance:
     315http://www.henriknordstrom.net/code/webdns/
     316
     317
     318sub-octet delegation for v4 nets:
     319p 216-218 in cricket book
Note: See TracChangeset for help on using the changeset viewer.