The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Net::DNS::ZoneParse - Perl extension for Parsing and Writing BIND8/9 (and RFC1035) compatible zone-files.

SYNOPSIS

Plain interface

  use Net::DNS::ZoneParse qw(parse, writezone);

  my $rr = parse("db.example.com");
  my $zonetext = writezone($rr);

Object oriented interface - supporting cached parsing

  use Net::DNS::ZoneParse;

  my $parser = Net::DNS::ZoneParse->new;
  my $zone = $parser->zone("example.com");
  $zone->rr->[0]->newserial if($zone->rr->[0]->{type} eq "SOA");
  $zone->save;

DESCRIPTION

This module is yet another caching parser/generator for RFC1035 compatible zone-files. It aims to have a fast interface for parsing and support all RRs known to Net::DNS::RR.

In some circumstances the parsing of an entry is too complicated for the default _from_string-logic of the corresponding RR. For this cases, N::D::ZoneParse extends the Interface of N::D::RR with the function new_from_filestring. Per default this will call the responding new_from_string, but may be implemented differently for a given RR.

When dealing not just with one Zonefile, the Object-oriented Interface even becomes more handy. It provides an interface loading only the zonefiles needed and those only once. Each Zone is then represented by a Net::DNS::ZoneParse::Zone object.

METHODS

new

        $parser = Net::DNS::ZoneParse->new( [ $config ] )

Creating a new Net::DNS::ZoneParse object with the given configuration for file-autoloading. The following parameters are currently supported:

path

Path to the directory where all of the ZoneFiles can be found. The default is the current working directory.

prefix

The prefix to the generate the filename out of the zonename. The default is "db.". Thus using the default, loading "example.com" will search for the file "db.example.com"

suffix

Similar to prefix, the default is the empty string.

dontload

If set to true, the zone() wont parsed the corresponding file automaticly

nocache

If set to true, loaded files won't be cached within this object automaticly. In this case, extent has to be used.

parser

The parsers to use when reading files. These must be given within a arrayreference. All of the given parsers must be found within Net::DNS::ZoneParse::Parser. The default is [ "Native" ]. All Parsers in the list will be used consecutively unless one has returned contents of the file to read.

parser_args

A hashref with parser-names as keys. Some parser may allow further options; these can be accessed using this argument.

generator

The generators to use when generating a new zonefile. The use is corresponding to parsers. Generators must be found within Net::DNS::ZoneParse::Generator

zone

        $zone = $parser->zone("example.com" [, $param])

Returns the Net::DNS::ZoneParse::Zone object for the given domain. If there where no corresponding zonefile found, an empty Object will be returned. If the zone was loaded for the first time the corresponding file will be loaded, otherwise the cached object will be returned.

$param is a hash-reference which can be used to adjust the behaviour. If a parameter is not given here, it's value used at the time of the objects generation will be used. Supported parameters are:

path
filename

This will take precedence above prefix/suffix

prefix
suffix
dontload

extent

        $parser->extent("example.com", $rrs);

Extent the cached entries for the given origin - "example.com" in the example by the RRs given in $rrs. These might be an array or a reference to an array of Net::DNS::RR-Objects.

uncache

        $parser->uncache("example.com");

Uncaching removes a zone from the zonecache. The exported instances of this zone will stay alive, but the next call to zone() will generate a new object.

EXPORT

writezone

        $zonetext = writezone($rr);
        # or
        $zonetext = $parser->writezone($zone);

$rr might be either an array of Net::DNS::RR object, or a reference to them. If using the object-oriented interface, this can be used to by just using the name of the zone to write. In that case, correct directives for $ORIGIN and $TTL will be created, too.

writezone will then return a string with the contents of a corresponding zone-file.

As last parameter, a additional Hash-ref can be used to tweak some of the behavior. The following parameters are supported:

origin

This may contain the zone-name, unless used in the object-oriented interface

ttl

The default TTL to be used in the generated file.

rr

The Resource-records to write

generator

the same as in new

parse

        $rr = parse($file);
        # or
        $rr = $parser->parse($file [, $param [, $rrin]]);

parse a specific zonefile and returns a reference to an array of Net::DNS::RR objects.

If the function-oriented interface is used and Net::DNS::ZoneFile::Fast is installed, that parser is used instead.

$file might be either a filename or a open filehandle to be read.

$param is a HASH-ref, with the following entries. If given, those may change to reflect the contents of the parsed file.

origin

The current domains name

ttl

The default TTL for all RRs

fh

An already opened filehandle, $file can be ommitted, if this is given.

file

The name of the file to read, $file can be ommitted, if this is given

rrs

Resource Records, which will be added to these found in the file

nocache

if given, the parsed file will not be cached in the object.

parser
parser_args

Same as in the call of new().

$rrin is a ARRAY-ref of Net::DNS::RR objects. If given, this list will be extended.

SEE ALSO

Net::DNS

AUTHOR

Benjamin Tietz <benjamin@micronet24.de>

COPYRIGHT

Copyright (C) 2010 by Benjamin Tietz

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.10.0 or, at your option, any later version of Perl 5 you may have available.