http://qs321.pair.com?node_id=380335


in reply to Parsing Zonefiles

Hi there:

I don't know if you did look at it, but Net::DNS::ZoneFile will parse most BIND zone files, returning a list of Net::DNS::RR objects as the result.

You can then act on the objects themselves, remove them from the list or add new ones. Finally, you can simply print them to a new file. The pseudo-code would look like:

use Net::DNS; use Net::DNS::ZoneFile; my $rrs = Net::DNS::ZoneFile->read("/var/named/named.local", { # You might need to set the # $ORIGIN explicitly here if # your zone file does not make # this explicit. See perldoc } ); # Print the RRs that were fetched print $_->string, "\n" for @$rrs; # Add a sample RR push @$rrs, new Net::DNS::RR "3 7200 IN PTR always-listed.your.domain. +"; # Update the serial :) # You can also "replace" the current serial, with the current date, # as commonly recommended. However, if you're looking into this, you # probably have better change control on your zones already. foreach (@$rrs) { next unless $_->type eq 'SOA' and $_->class eq 'IN'; $_->serial($_->serial + 1); } # Print the resulting RR set (this could be your new zone by printing +to # a file) print $_->string, "\n" for @$rrs;

Feel free to ask if you need further help with this code...

Best regards

-lem, but some call me fokat

Replies are listed 'Best First'.
Re^2: Parsing Zonefiles
by Elijah_A (Novice) on Aug 06, 2004 at 02:43 UTC
    Ah!! now I remember why I used a temporary file for the main zone file, It's for the DNS::Zone::File; ... didn't work out though.
    Hmmm... Net::DNS::ZoneFile might just be what I'm looking for... I tried executing it till the print part, but didn't get any results.