Index: trunk/DNSDB.pm
===================================================================
--- trunk/DNSDB.pm	(revision 269)
+++ trunk/DNSDB.pm	(revision 270)
@@ -1319,5 +1319,5 @@
   my $zone = NetAddr::IP->new(shift);
   return ('FAIL',"Zone name must be a valid CIDR netblock") unless ($zone && $zone->addr !~ /^0/);
-  my $revpatt = shift;
+  my $revpatt = shift;	# construct a custom (A/AAAA+)? PTR template record
   my $group = shift;
   my $state = shift;
@@ -1344,4 +1344,6 @@
 
   my $warnstr = '';
+  my $defttl = 3600;	# 1 hour should be reasonable.  And unless things have gone horribly
+			# wrong, we should have a value to override this anyway.
 
   # Wrap all the SQL in a transaction
@@ -1375,4 +1377,5 @@
       # While we're at it, we substitute $zone for ZONE in the value.
       if ($val eq 'ZONE') {
+	next if $revpatt;	# If we've got a pattern, we skip the default record version.
 ##fixme?  do we care if we have multiple whole-zone templates?
 	$val = $zone->network;
@@ -1419,4 +1422,5 @@
 		"[new $zone] Added SOA record [contact $tmp1[0]] [master $tmp1[1]] ".
 		"[refresh $tmp2[0]] [retry $tmp2[1]] [expire $tmp2[2]] [minttl $tmp2[3]], TTL $ttl"));
+	$defttl = $tmp2[3];
       } else {
 	my $logentry = "[new $zone] Added record '$host $typemap{$type}";
@@ -1427,12 +1431,22 @@
     }
 
-# Generate record based on provided pattern.  
-	my $addr;
-	if (_ipparent($dbh, 'n', 'y', \$tmpval, $rdns_id, \$addr)) {
-	  $val = $addr->addr;
-	} else {
-	  $warnstr .= "\nDefault record '$val $typemap{$type} $host' doesn't fit in $zone, skipping";
-	  next;
-	}
+    # Generate record based on provided pattern.  
+    if ($revpatt) {
+      my $host;
+      my $type = ($zone->{isv6} ? 65284 : 65283);
+      my $val = $zone->network;
+
+      # Substitute $zone for ZONE in the hostname.
+      $host = _ZONE($zone, $revpatt);
+
+      my $domid = 0;
+      if (!($domid = _hostparent($dbh, $host))) {
+	$warnstr .= "\nDefault pattern added as PTR template instead of $typemap{$type};  domain not found for $host";
+	$type = 65282;
+	$domid = 0;	# just to be explicit.
+      }
+
+      $sth_in->execute($domid,$host,$type,$val,$defttl);
+    }
 
     # If there are warnings (presumably about default records skipped for cause) log them
Index: trunk/dns.cgi
===================================================================
--- trunk/dns.cgi	(revision 269)
+++ trunk/dns.cgi	(revision 270)
@@ -448,7 +448,8 @@
 # getRecByName($dbh, (revrec => $webvar{revrec}, defrec => $webvar{defrec}, host => 'string'));
 
-  if ($webvar{add_failed}) {
-    $page->param(add_failed => 1);
-    $page->param(errmsg => $webvar{errmsg});
+  if ($session->param('add_failed')) {
+    $session->clear('add_failed');
+    $page->param(errmsg => $session->param('errmsg'));
+    $session->clear('errmsg');
     $page->param(revzone => $webvar{revzone});
     $page->param(revpatt => $webvar{revpatt});
@@ -475,6 +476,6 @@
   } else {
     logaction(0, $session->param("username"), $webvar{group}, "Failed adding reverse zone $webvar{revzone} ($msg)");
-    changepage(page => "newrevzone", revrec => 'y', add_failed => 1, revzone => $webvar{revzone},
-	revpatt => $webvar{revpatt}, errmsg => $msg);
+    $session->param('add_failed', 1);
+    changepage(page => "newrevzone", revzone => $webvar{revzone}, revpatt => $webvar{revpatt}, errmsg => $msg);
   }
 
Index: trunk/templates/newrevzone.tmpl
===================================================================
--- trunk/templates/newrevzone.tmpl	(revision 269)
+++ trunk/templates/newrevzone.tmpl	(revision 270)
@@ -15,5 +15,5 @@
 <tr><td>
     <table border="0" cellspacing="2" cellpadding="2" width="100%">
-<TMPL_IF add_failed>	<tr><td class="errhead" colspan="2">Error adding reverse zone <TMPL_VAR NAME=revzone>: 
+<TMPL_IF errmsg>	<tr><td class="errhead" colspan="2">Error adding reverse zone <TMPL_VAR NAME=revzone>: 
 <TMPL_VAR NAME=errmsg></td></tr></TMPL_IF>
 	<tr class="darkrowheader"><td colspan="2" align="center">Add Reverse Zone</td></tr>
