freeside/FS/FS Conf.pm,1.94,1.95 domain_record.pm,1.16,1.17
ivan
ivan at pouncequick.420.am
Wed Apr 7 04:39:17 PDT 2004
Update of /home/cvs/cvsroot/freeside/FS/FS
In directory pouncequick:/tmp/cvs-serv9515/FS/FS
Modified Files:
Conf.pm domain_record.pm
Log Message:
automatically update reverse-ARPA records (Bug#462) / recognize SOA records with the fqdn as well as @
Index: domain_record.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/domain_record.pm,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- domain_record.pm 5 Aug 2003 00:20:43 -0000 1.16
+++ domain_record.pm 7 Apr 2004 11:39:15 -0000 1.17
@@ -1,7 +1,8 @@
package FS::domain_record;
use strict;
-use vars qw( @ISA $noserial_hack );
+use vars qw( @ISA $noserial_hack $DEBUG );
+use FS::Conf;
#use FS::Record qw( qsearch qsearchs );
use FS::Record qw( qsearchs dbh );
use FS::svc_domain;
@@ -9,6 +10,8 @@
@ISA = qw(FS::Record);
+$DEBUG = 1;
+
=head1 NAME
FS::domain_record - Object methods for domain_record records
@@ -110,6 +113,18 @@
}
}
+ my $conf = new FS::Conf;
+ if ( $self->rectype =~ /^A$/ && ! $conf->exists('disable_autoreverse') ) {
+ my $reverse = $self->reverse_record;
+ if ( $reverse && ! $reverse->recnum ) {
+ my $error = $reverse->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "error adding corresponding reverse-ARPA record: $error";
+ }
+ }
+ }
+
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
'';
@@ -153,6 +168,18 @@
}
}
+ my $conf = new FS::Conf;
+ if ( $self->rectype =~ /^A$/ && ! $conf->exists('disable_autoreverse') ) {
+ my $reverse = $self->reverse_record;
+ if ( $reverse && $reverse->recnum && $reverse->recdata eq $self->zone.'.' ){
+ my $error = $reverse->delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "error removing corresponding reverse-ARPA record: $error";
+ }
+ }
+ }
+
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
'';
@@ -284,10 +311,16 @@
my $soa = qsearchs('domain_record', {
svcnum => $self->svcnum,
- reczone => '@', #or full domain ?
+ reczone => '@',
+ recaf => 'IN',
+ rectype => 'SOA', } )
+ || qsearchs('domain_record', {
+ svcnum => $self->svcnum,
+ reczone => $self->svc_domain->domain.'.',
recaf => 'IN',
rectype => 'SOA',
- } ) or return "soa record not found; can't increment serial";
+ } )
+ or return "soa record not found; can't increment serial";
my $data = $soa->recdata;
$data =~ s/(\(\D*)(\d+)/$1.($2+1)/e; #well, it works.
@@ -328,11 +361,44 @@
$zone;
}
-=back
+=item reverse_record
-=head1 VERSION
+Returns the corresponding reverse-ARPA record as another FS::domain_record
+object. If the specific record does not exist in the database but the
+reverse-ARPA zone itself does, an appropriate new record is created. If no
+reverse-ARPA zone is available at all, returns false.
-$Id$
+(You can test whether or not record itself exists in the database or is a new
+object that might need to be inserted by checking the recnum field)
+
+Mostly used by the insert and delete methods - probably should see them for
+examples.
+
+=cut
+
+sub reverse_record {
+ my $self = shift;
+ warn "reverse_record called\n" if $DEBUG;
+ #should support classless reverse-ARPA ala rfc2317 too
+ $self->recdata =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
+ or return '';
+ my $domain = "$3.$2.$1.in-addr.arpa";
+ my $ptr_reczone = $4;
+ warn "reverse_record: searching for domain: $domain\n" if $DEBUG;
+ my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } )
+ or return '';
+ warn "reverse_record: found domain: $domain\n" if $DEBUG;
+ my %hash = (
+ 'svcnum' => $svc_domain->svcnum,
+ 'reczone' => $ptr_reczone,
+ 'recaf' => 'IN',
+ 'rectype' => 'PTR',
+ );
+ qsearchs('domain_record', \%hash )
+ or new FS::domain_record { %hash, 'recdata' => $self->zone.'.' };
+}
+
+=back
=head1 BUGS
Index: Conf.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Conf.pm,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -d -r1.94 -r1.95
--- Conf.pm 5 Apr 2004 14:06:04 -0000 1.94
+++ Conf.pm 7 Apr 2004 11:39:15 -0000 1.95
@@ -1199,6 +1199,13 @@
'type' => 'checkbox',
},
+ {
+ 'key' => 'disable_autoreverse',
+ 'section' => 'BIND',
+ 'description' => 'Disable automatic synchronization of reverse-ARPA entries.',
+ 'type' => 'checkbox',
+ },
+
);
1;
More information about the freeside-commits
mailing list