ispman/lib/ISPMan/DNSMan AAAArecords.pm, NONE, 1.1 LDIFUtils.pm, 1.3, 1.4

Joerg Delker <[email protected]> Sun, 03 Jun 2007 19:26:19 +0000
Newsgroups gmane.comp.isp.ispman.cvs
Message-ID <[email protected]>
Update of /cvsroot/ispman/ispman/lib/ISPMan/DNSMan
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv19284/lib/ISPMan/DNSMan

Modified Files:
	LDIFUtils.pm 
Added Files:
	AAAArecords.pm 
Log Message:
implemented feature request [ 1483788 ] ipv6 support
NOTE: ldap schema updated necessary!!!

--- NEW FILE: AAAArecords.pm ---
package ISPMan::DNSMan::AAAArecords;

use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);

require Exporter;

@ISA    = qw(Exporter AutoLoader);
@EXPORT = qw(
  isAAAArecord
  editDNSaAAARecords
  addDNSaAAARecord
  modifyDNSaAAARecord
  deleteDNSaAAARecord
  getDNSaAAARecords
);
$VERSION = '0.01';

sub isAAAArecord {
    my $self   = shift;
    my $host   = shift;
    my $domain = shift;
    my $branch = join ",", ( "ou=aAAARecord", $self->getDNSDN($domain) );
    my $filter = "relativeDomainName=$host";

    if ( $self->getConfig("debug") > 2 ) {
        print qq|
           ISPMan::DNSMan::AAAArecords->isAAAArecord

           Getting input:
           host: $host
           domain: $domain
           
           Calculating:
           branch: $branch
           filter:$filter
           |;
        print "EntryExists: ", $self->entryExists( $branch, $filter );
    }

    return $self->entryExists( $branch, $filter );
}

sub getDNSaAAARecords {
    my $self               = shift;
    my $domain             = shift;
    my $relativeDomainName = shift;
    my $filter;
    if ($relativeDomainName) {
        $filter =
"&(objectclass=dnsZone)(aAAARecord=*)(relativeDomainName=$relativeDomainName)";
    }
    else {
        $filter = "&(objectclass=dnsZone)(aAAARecord=*)";
    }
    my $dn = $self->getDNSDN($domain);

    my $h =
      $self->getEntriesAsHashRef( $dn, $filter,
        [ "aAAARecord", "relativeDomainName", "pTRRecord" ] );

    my $records;
    $self->{'domain'}{'dns'} = ();
    undef $self->{'domain'}{'dns'};
    for my $hdn ( sort keys %$h ) {
        $records = $self->as_arrayref( $h->{$hdn}{'aAAARecord'} );
        for (@$records) {

            push @{ $self->{'domain'}{'dns'} },
              {
                'host' => $h->{$hdn}{'relativeDomainName'},
		'ttl'  => $h->{$hdn}{'DNSTTL'},
                'ptr'  => $h->{$hdn}{'pTRRecord'},
                'ip'   => $_
              };
        }
    }
    return $self->{'domain'}{'dns'};

}

sub editDNSaAAARecords {
    my $self = shift;
    my $r    = shift;

    return
      unless $self->checkDomainType( $r->param("ispmanDomain"), "primary" );
    $self->{'domain'} = $self->getDomainInfo( $r->param("ispmanDomain") );

    $self->getDNSaAAARecords( $r->param("ispmanDomain") );

    my $template = "";
    if ( $self->isDomainEditable( $r->param("ispmanDomain") ) ) {
        $template = $self->getTemplate("dns/edit_AAAArecords.tmpl");
    }
    else {
        $template = $self->getTemplate("dns/view_AAAArecords.tmpl");
    }
    print $template->fill_in( PACKAGE => "ISPMan" );
}

sub modifyDNSaAAARecord {
    my $self = shift;
    my $r    = shift;
    my $dn   = $r->param("dn");

    # delete old record
    $self->deleteEntry( $dn );

    # add record
    $self->addDNSaAAARecord($r);
}
    
sub deleteDNSaAAARecord {   
    my $self = shift;
    my $r    = shift;
    my $dn   = $r->param("dn");
    
    my $entry = $self->getEntry( $r->param("dn") );
    $self->deleteDNSRecord(
            $r->param("ispmanDomain"),
            "aAAARecord",
            $entry->get_value("relativeDomainName"),
            $entry->get_value("aAAARecord")
    );
    $self->editDNSaAAARecords($r);    
}

sub addDNSaAAARecord {
    my $self      = shift;
    my $r         = shift;
    my $extraHash = {};

    if ( $self->isCNAME( $r->param("host"), $r->param("ispmanDomain") ) ) {
        $r->param( "error",
            "ERROR: " . $r->param("host") . " is defined as an CNAME record" );
    }
    else {
        $extraHash->{'pTRRecord'} = $r->param("ip") if $r->param("pTRRecord");
        $self->newDNSRecord( $r->param("ispmanDomain"),
            "aAAARecord", $r->param("host"), $r->param("ip"), $extraHash );
    }
    $self->editDNSaAAARecords($r);
}

1;
__END__


Index: LDIFUtils.pm
===================================================================
RCS file: /cvsroot/ispman/ispman/lib/ISPMan/DNSMan/LDIFUtils.pm,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- LDIFUtils.pm	30 May 2004 23:35:38 -0000	1.3
+++ LDIFUtils.pm	3 Jun 2007 19:26:17 -0000	1.4
@@ -8,6 +8,7 @@
 @ISA    = qw(Exporter AutoLoader);
 @EXPORT = qw(
   make_ldif_aRecord
+  make_ldif_aAAARecord
   make_ldif_mXRecord
   make_ldif_nSRecord
   make_ldif_cNAMERecord
@@ -34,6 +35,25 @@
     return $ldif;
 }
 
+sub make_ldif_aAAARecord {
+    my $self = shift;
+    my ( $domain, $host, $ip ) = @_;
+    $self->prepareBranchForDN( $self->getaAAARecordBranchDn( $domain, $ip ) );
+    my $dn = $self->getaAAARecordDn( $domain, $host, $ip );
+    my $ldif = join(
+        "\n",
+        (
+            "dn: $dn",
+            "objectClass: top",
+            "objectClass: dnsZone",
+            "relativeDomainName: $host",
+            "zoneName: $domain",
+            "aAAARecord: $ip"
+        )
+    );
+    return $ldif;
+}
+
 sub make_ldif_mXRecord {
     my $self = shift;
     my ( $domain, $origion, $pref, $host ) = @_;


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/