summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2006-10-18 12:38:20 +0000
committerweasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede>2006-10-18 12:38:20 +0000
commit1fa53e7411527e5fd323a1e724b633a49b916e0b (patch)
tree0701563f0c505dd0322e904fb4d4f2fcdded8fcd
parente2e1056c07c051aa3bcb37338a96407802e73f88 (diff)
Add make-bindconfig-from-ldap-HOSTNAME
git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@199 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
-rwxr-xr-xbin/make-bindconfig-from-ldap-HOSTNAME124
1 files changed, 124 insertions, 0 deletions
diff --git a/bin/make-bindconfig-from-ldap-HOSTNAME b/bin/make-bindconfig-from-ldap-HOSTNAME
new file mode 100755
index 0000000..a45b236
--- /dev/null
+++ b/bin/make-bindconfig-from-ldap-HOSTNAME
@@ -0,0 +1,124 @@
+#!/usr/bin/perl -wT
+
+# Copyright (c) 2004, 2005 Peter Palfrader <peter@palfrader.org>
+# All rights reserved.
+
+=pod
+
+=head1 NAME
+
+makezonefile - create config file for bind
+
+=head1 SYNOPSIS
+
+makezonefile
+
+=head1 DESCRIPTION
+
+makezonefile reads from STDIN a list of domains and
+their assoziated nameservers; one domain per line, the nameservers
+seperated by whitespace.
+
+Example:
+
+ debian.org murphy.debian.org auric.debian.org ns2.cistron.nl ns.hands.com
+ palfrader.org gw.frosty-geek.net ns1.3node.com ns.sourcecode.at i-got-this.ns.for-beer.org
+ 3node.com ns2.3node.com ns1.3node.com
+
+For each domain it will then look whether this host's name (as configured in
+the @THISNAMES variable) appears in the list of nameservers and if that is the
+case add a slave entry to the file hardcoded in the script. Master Nameserver is hardcoded too.
+
+Afterwards a bind9 reload will be issued.
+
+
+The script is typicalle called from ssh (using authorized keys with command=script).
+
+=head1 OPTIONS
+
+none
+
+=head1 AUTHOR
+
+Peter Palfrader E<lt>pp@3node.com<gt>
+
+=head1 REQUIREMENTS
+
+none but perl
+
+=head1 SEE ALSO
+
+Ask author.
+
+=cut
+
+use strict;
+use English;
+
+$ENV{'PATH'} = '/bin:/usr/bin';
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
+
+my $NAMEDCONF = '/etc/bind/named.conf.ldapzones.slave.pushed';
+my @RELOAD = qw{/etc/init.d/bind9 reload};
+my @THISNAMES = qw{opium.multi24.com.};
+#my @THISNAMES = qw{seppia.noreply.org. ns3.noreply.org.};
+#my @THISNAMES = qw{redeemer.devspread.org.};
+
+my $date = localtime();
+open (CONF, ">$NAMEDCONF") or
+ die ("Cannot open $NAMEDCONF: $!\n");
+print CONF << "EOF";
+// conf file for bind
+// $date
+// automatically created by $PROGRAM_NAME from stdin (probably called by ssh)
+// vim:set syn=named:
+EOF
+
+my @lines = <>;
+DOMAIN:
+for my $line (@lines) {
+ chomp ($line);
+ my @part = split (/\s+/, $line);
+ my $domain = shift @part;
+ my @masters = split /\|/, shift @part;
+ unless (defined $domain && ($domain =~ /^[a-z0-9.-]+$/)) {
+ warn "Skipping $domain: bad name\n";
+ next;
+ };
+ if (scalar @masters == 0) {
+ warn "Skipping $domain: No masters\n";
+ next;
+ };
+ for my $master (@masters) {
+ unless (defined $master && ($master =~ /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/)) {
+ warn "Skipping $domain: bad master '$master'\n";
+ next DOMAIN;
+ };
+ };
+ my $this_ns = 0;
+ for my $ns (@part) {
+ for my $my_name (@THISNAMES) {
+ $this_ns |= ($ns eq $my_name);
+ };
+ };
+ next unless $this_ns;
+
+ print CONF << "EOF";
+ zone "$domain" {
+ type slave;
+ file "ldapzones.slave.pushed-$domain";
+ allow-transfer { "none"; };
+ allow-query { any; };
+ masters {
+EOF
+ for my $master (@masters) {
+ print CONF " $master;\n";
+ };
+ print CONF << "EOF";
+ };
+ };
+EOF
+};
+close (CONF);
+
+exec(@RELOAD);