Rechercher une page de manuel
DNS::ZoneParse.3pm
Langue: en
Version: 2004-10-24 (mandriva - 01/05/08)
Section: 3 (Bibliothèques de fonctions)
NAME
DNS::ZoneParse - Parse and manipulate DNS Zone Files.SYNOPSIS
use DNS::ZoneParse;
my $zonefile = DNS::ZoneParse->new("/path/to/dns/zonefile.db", $origin);
# Get a reference to the MX records my $mx = $zonefile->mx;
# Change the first mailserver on the list $mx->[0] = { host => 'mail.localhost.com', priority => 10, name => '@' };
# update the serial number $zonefile->new_serial();
# write the new zone file to disk open NEWZONE, ">/path/to/dns/zonefile.db" or die "error"; print NEWZONE $zonefile->output(); close NEWZONE;
INSTALLATION
perl Makefile.PL make make test make install
Win32 users substitute ``make'' with ``nmake'' or equivalent. nmake is available at http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe
DESCRIPTION
This module will parse a Zone File and put all the Resource Records (RRs) into an anonymous hash structure. At the moment, the following types of RRs are supported: SOA, NS, MX, A, CNAME, TXT, PTR. It could be useful for maintaining DNS zones, or for transferring DNS zones to other servers. If you want to generate an XML-friendly version of your zone files, it is easy to use XML::Simple with this module once you have parsed the zonefile.DNS::ZoneParse scans the DNS zonefile - removes comments and seperates the file into its constituent records. It then parses each record and stores the records internally. See below for information on the accessor methods.
METHODS
- new
- This creates the DNS::ZoneParse Object and loads the zonefile
Example:
my $zonefile = DNS::ZoneParse->new(``/path/to/zonefile.db'');You can also initialise the object with the contents of a file:
my $zonefile = DNS::ZoneParse->new( \$zone_contents );You can pass a second, optional parameter to the constructor to supply an $origin if none can be found in the zone file.
my $zonefile = DNS::ZoneParse->new( \$zone_contents, $origin );
- a(), cname(), mx(), ns(), ptr()
- These methods return references to the resource records. For example:
my $mx = $zonefile->mx;
Returns the mx records in an array reference.
A, CNAME, NS, MX and PTR records have the following properties: 'ttl', 'class', 'host', 'name'
MX records also have a 'priority' property.
- soa()
- Returns a hash reference with the following properties: 'serial', 'origin', 'primary', 'refresh', 'retry', 'ttl', 'minimumTTL', 'email', 'expire'
- dump
- Returns a copy of the datastructute that stores all the resource records. This might be useful if you want to quickly transform the data into another format, such as XML.
- new_serial
- "new_serial()" incriments the Zone serial number. It will generate a date-based serial number. Or you can pass a positive number to add to the current serial number.
Examples:
$zonefile->new_serial(); # generates a new serial number based on date: # YYYYmmddHH format, incriments current serial # by 1 if the new serial is still smaller
$zonefile->new_serial(50); # adds 50 to the original serial number
- output
- "output()" returns the new zonefile output as a string. If you wish your output formatted differently, you can pass the output of "dump()" to your favourite templating module.
EXAMPLES
This script will print the A records in a zone file, add a new A record for the name ``new'' and then return the zone file.
use strict; use DNS::ZoneParse;
my $zonefile = DNS::ZoneParse->new("/path/to/zonefile.db");
print "Current A Records\n"; my $a_records = $zonefile->a();
foreach my $record (@$a_records) { print "$record->{name} resolves at $record->{host}\n"; }
push (@$a_records, { name => 'new', class => 'IN', host => '127.0.0.1', ttl => '' });
$zonefile->new_serial(); my $newfile = $zonefile->output();
This script will convert a DNS Zonefile to an XML file using XML::Simple.
use strict; use DNS::ZoneParse; use XML::Simple;
my $zonefile = DNS::ZoneParse->new("/path/to/zonefile.db");
my $new_xml = XMLout($zonefile->dump, noattr => 1, suppressempty => 1, rootname => $zonefile->origin);
CHANGES
see ChangesAPI
The DNS::ZoneParse API may change in future versions. At present, the parsing is not as strict as it should be and support for $ORIGIN and $TTL is quite basic. It would also be nice to support the "INCLUDE" statement. Furthermore, parsing large zonefiles with thousands of records can use lots of memory - some people have requested a callback interface.BUGS
I can squash more bugs with your help. Please let me know if you spot something that doesn't work as expected.You can report bugs via the CPAN RT: <http://rt.cpan.org/NoAuth/Bugs.html?Dist=DNS-ZoneParse>
If possible, please provide a diff against t/dns-zoneparse.t and t/test-zone.db that demonstrates the bug(s).
SEE ALSO
Other modules with similar functionality:Net::DNS::ZoneParser, Net::DNS::ZoneFile, DNS::ZoneFile
AUTHOR
Simon FlackLICENSE
DNS::ZoneParse is free software which you can redistribute and/or modify under the same terms as Perl itself.Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre