From 1fa53e7411527e5fd323a1e724b633a49b916e0b Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Wed, 18 Oct 2006 12:38:20 +0000 Subject: Add make-bindconfig-from-ldap-HOSTNAME git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@199 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede --- bin/make-bindconfig-from-ldap-HOSTNAME | 124 +++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100755 bin/make-bindconfig-from-ldap-HOSTNAME 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 +# 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 Epp@3node.com + +=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); -- cgit v1.2.3