|
1 #!/usr/bin/perl |
|
2 |
|
3 use v5.10; |
|
4 use warnings; |
|
5 use strict; |
|
6 use File::Path; |
|
7 use DNStools::Config qw(get_config); |
|
8 use Net::LibIDN qw(:all); |
|
9 use Pod::Usage; |
|
10 use Getopt::Long; |
|
11 |
|
12 my $CHARSET = "UTF-8"; |
|
13 |
|
14 my %cf = get_config(); |
|
15 |
|
16 my $opt_interactive = 0; |
|
17 |
|
18 MAIN: { |
|
19 |
|
20 GetOptions( |
|
21 "i|interactive!" => \$opt_interactive, |
|
22 "h|help" => sub { pod2usage(-exit => 0, -verbose => 1) }, |
|
23 "m|man" => sub { |
|
24 pod2usage( |
|
25 -exit => 0, |
|
26 -verbose => 2, |
|
27 # "system('perldoc -V &>/dev/null')" appears shorter, but may not |
|
28 # do what you expect ( it still returns 0 on debian squeeze with |
|
29 # dash as system shell even if cannot find the command in $PATH) |
|
30 -noperldoc => system('perldoc -V >/dev/null 2>&1') |
|
31 ); |
|
32 }, |
|
33 ) |
|
34 and @ARGV |
|
35 or pod2usage; |
|
36 |
|
37 for my $utf8zone (@ARGV) { |
|
38 my $zone = idn_to_ascii($utf8zone, $CHARSET); |
|
39 |
|
40 if (not(-d "$cf{master_dir}/$zone" or -f "$cf{zone_conf_dir}/$zone")) { |
|
41 say "$utf8zone ($zone): nothing found"; |
|
42 next; |
|
43 } |
|
44 |
|
45 if ($opt_interactive) { |
|
46 print "Remove $utf8zone ($zone)? [y/n]: "; |
|
47 chomp($_ = <STDIN>); |
|
48 next if not /^y(?:es)?$/i; |
|
49 } |
|
50 |
|
51 rmtree("$cf{master_dir}/$zone", "$cf{zone_conf_dir}/$zone", |
|
52 { verbose => 1 }); |
|
53 |
|
54 } |
|
55 } |
|
56 |
|
57 __END__ |
|
58 |
|
59 =head1 NAME |
|
60 |
|
61 zone-rm - remove a zone |
|
62 |
|
63 =head1 SYNOPSIS |
|
64 |
|
65 zone-rm [-i|--interactive] zone... |
|
66 |
|
67 zone-rm [-h|--help] |
|
68 zone-rm [-m|--man] |
|
69 |
|
70 =head1 DESCRIPTION |
|
71 |
|
72 This removes the specified zone(s) from the configured directories. |
|
73 |
|
74 =head1 OPTIONS |
|
75 |
|
76 The standard B<-h>, B<--help>, B<-m>, and B<--man> options are |
|
77 understood. |
|
78 |
|
79 =over |
|
80 |
|
81 =item B<-i>|B<--interactive> |
|
82 |
|
83 Ask for confirmation. (default: off) |
|
84 |
|
85 =cut |