in reply to Re^6: Deleting lines from named.conf file
in thread Deleting lines from named.conf file

i think i need to provide something that written inside a loop to replace the lines of the zone with space like
s///;

That statement doesn't do anything other than substituting nothing with nothing, which isn't anything you could call something.

Sample named.conf:

options { listen-on port 53 { 127.0.0.1; }; // listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost; }; forwarders { 2.3.4.5; }; recursion yes; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "foo.bar.de" { type master; file "foo-bar"; allow-transfer { 1.2.3.4; 1.2.3.5; }; }; zone "quux.info" { type forward; forwarders { 3.4.5.6; 4.5.6.7; }; }; zone "blah-fasel.de" { type forward; forwarders { 5.6.7.8; }; }; zone "10.in-addr.arpa" { type forward; forwarders { 1.2.3.4; 2.3.4.5; 3.4.5.6; }; }; include "/etc/named.rfc1912.zones";

The following script is used to delete a zone:

#!/usr/bin/perl -w use strict; print "please enter the domain name: "; chomp (my $targetdomain = <STDIN>); my $file = "named.conf"; # copied to my home folder rename $file, "$file.bak" or die "Can't rename file '$file': $!\n"; open my $in, '<', "$file.bak" or die "Can't read file '$file': $!\n"; open my $out, '>', $file or die "Can't write file '$file': $!\n"; my $comment = 0; my $block = 0; while(<$in>) { if (/^zone\s+"$targetdomain"/) { $comment++; $block += () = /(\{)/g; # print $out '// '.$_; next; } if($comment) { $block += () = /(\{)/g; s!^!// ! if $comment or $block; $block -= () = /(\})/g; unless ($block) { $comment = 0; next; } } print $out $_ unless $comment; }

We delete the zone "quux.info" using that script, named 'zonedel.pl':

qwurx [shmem] ~ > perl zonedel.pl please enter the domain name: quux.info

The zone file (named.conf) is now:

options { listen-on port 53 { 127.0.0.1; }; // listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost; }; forwarders { 2.3.4.5; }; recursion yes; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "foo.bar.de" { type master; file "foo-bar"; allow-transfer { 1.2.3.4; 1.2.3.5; }; }; zone "blah-fasel.de" { type forward; forwarders { 5.6.7.8; }; }; zone "10.in-addr.arpa" { type forward; forwarders { 1.2.3.4; 2.3.4.5; 3.4.5.6; }; }; include "/etc/named.rfc1912.zones";

Running 'diff -uNw named.conf named.conf.bak' shows:

--- named.conf 2007-11-11 00:25:18.000000000 +0100 +++ named.conf.bak 2007-11-11 00:18:17.000000000 +0100 @@ -46,6 +46,13 @@ 1.2.3.5; }; }; +zone "quux.info" { + type forward; + forwarders { + 3.4.5.6; + 4.5.6.7; + }; +}; zone "blah-fasel.de" { type forward; forwarders {

Please let me know if that solution doesn't work for you. In that case, please provide a full set of files as I have done.

--shmem

_($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                              /\_¯/(q    /
----------------------------  \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}

Replies are listed 'Best First'.
Re^8: Deleting lines from named.conf file
by firewall00 (Acolyte) on Nov 11, 2007 at 00:05 UTC

    many thanks for your support


    first the script is running will but it has 2 issues :-
    the first issue when i want to delete the first zone like that
    zone "foo.com" { type master file path to the zone }; zone "blah.com" { type master file path to the zone }; zone "bar.com" { type master file path to the zone };
    if i want to delete the first zone "foo.com" the file doesn't change !!!
    the second issue if i want to delete any zone in the middle of the file like "blah.com"there is
    a newline created instead of deleted zone the output is like this
    zone "foo.com" { type master file path to the zone }; zone "bar.com" { type master file path to the zone };
    as u see a white space is created in the place of the deleted zone ,, so i want to eliminate this new line
    i think it will done by making the print statement to print the file with a shifted instead of the deleted zone .
    finally i want to understand the $comment variable is here what we provide such variable
    i knew that $block to count the brackets level and the $comment in the our old example was provided to count the comment level
    so what is the value of this variable here
    and Really am thankful for you
      Taking exactly your input file
      zone "foo.com" { type master file path to the zone }; zone "blah.com" { type master file path to the zone }; zone "bar.com" { type master file path to the zone };

      and running the script provided

      qwurx [shmem] ~ > perl zonedel.pl please enter the domain name: foo.com

      I get as result

      zone "blah.com" { type master file path to the zone }; zone "bar.com" { type master file path to the zone };

      Yes, it starts with a blank line, but the zone definition is gone. What the heck did you run? Is it really that difficult to suppress blank lines? I'm running out of advice for you.

      --shmem

      _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                    /\_¯/(q    /
      ----------------------------  \__(m.====·.(_("always off the crowd"))."·
      ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
        i have tried to eliminate the blank line that created so i but this line before the print line
        next if /^\s*$/;

        but this suppress any new line in the whole file
        i think i need to provide something like unless /\s/; after printing the line for this zone only
        thanks u are right and sorry for misunderstanding
        i want to ask you also about $comment variable if you wouldn't mind i want to understand what is itis value here itis as i asked you before
        at the end i hope to be like you in a day
        and thanks for every thing