diff -r 5578cb7933c1 -r 1306901e3462 sbin/update-serial
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbin/update-serial Mon Jun 06 12:48:00 2011 +0200
@@ -0,0 +1,126 @@
+#!/usr/bin/perl -w
+
+# Copyright (C) 2011 Matthias Förste
+# Copyright (C) 2010, 2011 Heiko Schlittermann
+# Copyright (C) 2010 Andre Süß
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+#
+# Matthias Förste
+
+=encoding utf8
+=cut
+
+use v5.10;
+use strict;
+use warnings;
+
+use Pod::Usage;
+use Getopt::Long;
+use File::Temp;
+use IO::File;
+use POSIX qw(strftime);
+use if $ENV{DEBUG} => "Smart::Comments";
+use DNStools::Config qw(get_config);
+use DNStools::UpdateSerial;
+
+my %opt;
+
+MAIN: {
+
+ GetOptions(
+ "sign-alert-time=i" => \$opt{sign_alert_time},
+ "key-counter-end=i" => \$opt{key_counter_end},
+ "h|help" => sub { pod2usage(-exit => 0, -verbose => 1) },
+ "m|man" => sub {
+ pod2usage(
+ -exit => 0,
+ -verbose => 2,
+ # "system('perldoc -V &>/dev/null')" appears shorter, but may not
+ # do what you expect ( it still returns 0 on debian squeeze with
+ # dash as system shell even if cannot find the command in $PATH)
+ -noperldoc => system('perldoc -V >/dev/null 2>&1')
+ );
+ }
+ ) or pod2usage;
+
+ # merge the config and the defined options from commandline
+ my @configs = ( "dnstools.conf", "$ENV{HOME}/.dnstools.conf",
+ "/etc/dnstools.conf");
+ unshift @configs, $ENV{DNSTOOLS_CONF} if defined $ENV{DNSTOOLS_CONF};
+ %config = get_config @configs, \%opt;
+
+ my @candidates = @ARGV ? zones(@ARGV) : changed_zones;
+ push @candidates, update_index($config{indexzone});
+ push @candidates, signature_expired($config{sign_alert_time});
+
+ my @need_rollover = need_rollover;
+ my @done_rollover = done_rollover;
+
+ push @candidates, begin_rollover(@need_rollover);
+ push @candidates, end_rollover(@done_rollover);
+
+ foreach my $zone (uniq(@candidates)) {
+# say "XXX: candidate $zone";
+ update_serial($zone);
+ sign($zone) if dnssec_enabled($zone, "$config{master_dir}/$config{indexzone}/$config{indexzone}");
+# say "XXX: $zone should be signed" if dnssec_enabled($zone, "$config{master_dir}/$config{indexzone}/$config{indexzone}");
+ }
+
+ file_entry;
+ mk_zone_conf($config{bind_dir}, $config{zone_conf_dir});
+ server_reload;
+
+}
+
+__END__
+
+=pod
+
+=head1 NAME
+
+ update-serial - updates the serial numbers and re-signs the zone files
+
+=head1 SYNOPSIS
+
+ update-serial [options] [zone...]
+
+=head1 DESCRIPTION
+
+B scans the configured directories for modified zone files. On any
+file found it increments the serial number and signs the zone, if approbiate.
+
+=head1 OPTIONS
+
+=over
+
+=item B<--sign-alert-time> I
+
+TODO
+
+=item B<--key-counter-end> I
+
+Maximum number if key usages.
+
+=back
+
+The common options B<-h>|B<--help>|B<-m>|B<--man> are supported.
+
+=head1 AUTHORS
+
+Matthias Förste L<>, Heiko Schlittermann L<>, Andre Süss L<>
+
+=cut
+
+# vim:sts=4 sw=4 aw ai sm: