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

i mean didnot work didnot perform what i was expected to delete lines from file
as you provide here :
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; $comment = 0 unless $block; } print $out $_ unless $comment; }
you comment print statement to deny the comments and then use print $out $_ unless $comment; which is completely logical
but when i run it didn't delete the zone .....,
i think i need to provide something that written inside a loop to replace the lines of the zone with space like
s///;

what do you think about that?
thanks shmem for your great support
warm regards

Replies are listed 'Best First'.
Re^7: Deleting lines from named.conf file
by shmem (Chancellor) on Nov 10, 2007 at 23:32 UTC
    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}

      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}