#!/usr/bin/perl -w
#
########################################
# 20070629 script for exportting zone from nictool to bind 9
# Writen by Jean-Félix DESIR <jfdesir@prosodie.com>
# email jfdesir@prosodie.com
# this script must be call as a subroutine in zone.cgi 
# It automatically extract data to bind on validation (add/delete/modif  of records)
# I use nt_zone_id to find the domain name 
#Copyright 2006 by jfdesir   PROSODIE, 
########################################

use DBI;
use strict;
use CGI;
my $q = new CGI;
my $zoneid = $q->param('nt_zone_id');
my $user = "nictool";
my $pass = "nictool";
my $host = "localhost";
my $port = "3306";
my $db = "nictool";
my ($domain, $ns0id , $ns1idi, $ns2id, $ttl ,$ns0, $mail, $serial, $refresh, $retry, $expire, $mini, $ns0, $ns1, $ns2, $ns1id,$n2id);
my $dbh = DBI->connect ("DBI:mysql:database=$db;host=$host:$port;user=$user;password=$pass") || die "Connect failed: $DBI::errstr\n";


###################################

sub create_zone 
{
 my $uth = $dbh->prepare("SELECT * FROM `nt_zone` WHERE `nt_zone_id` = '$zoneid'");
 $uth->execute;
 while(my @row = $uth->fetchrow_array()) {
	$domain=$row[2];
	$mail=$row[3];
	$serial=$row[5];
	$refresh=$row[6];
	$retry=$row[7];
	$expire=$row[8];
	$mini=$row[9];
	$ttl=$row[10];
	$ns0id=$row[11];
	$ns1id=$row[12];
	$ns2id=$row[13];
}
$uth->finish();

# NS0
my $uth_ns0 = $dbh->prepare("SELECT name FROM nt_nameserver WHERE `nt_nameserver_id` = '$ns0id'");
$uth_ns0->execute;
while(my @row0 = $uth_ns0->fetchrow_array()) {
	$ns0=$row0[0];
}
$uth_ns0->finish();

##NS1
my $uth_ns1 = $dbh->prepare("SELECT name FROM nt_nameserver WHERE `nt_nameserver_id` = '$ns1id'");
$uth_ns1->execute;
while(my @row1 = $uth_ns1->fetchrow_array()) {
	$ns1=$row1[0];
}
$uth_ns1->finish();


##NS2
my $uth_ns2 = $dbh->prepare("SELECT name FROM nt_nameserver WHERE `nt_nameserver_id` = '$ns2id'");
$uth_ns2->execute;
while(my @row2 = $uth_ns2->fetchrow_array()) {
	$ns2=$row2[0];
}
$uth_ns2->finish();


 open (FILE, ">/named_path/masters/$domain");

print FILE <<EOF;
\$TTL	$ttl
\@	IN	SOA	$ns0	$mail(
		$serial
		$refresh
		$retry
		$expire
		$mini)
	IN	NS	$ns0
	IN	NS	$ns1
	IN	NS	$ns2
EOF
 close (FILE);
maj_record();
newzone();
}


sub maj_record 
{
 my $uth_rec = $dbh->prepare("SELECT name,ttl,type,address,weight FROM nt_zone_record WHERE `nt_zone_id` = '$zoneid' AND `deleted` = '0'");
 $uth_rec->execute;
 while(my @row_rec = $uth_rec->fetchrow_array()) {
 	open (FILE, ">>/named_path/masters/$domain");
	if ( "$row_rec[2]" eq "MX"){ 
		print FILE "$row_rec[0]\t$row_rec[1]\tIN\t$row_rec[2]\t$row_rec[4]  $row_rec[3]\n";
	}else{
		print FILE "$row_rec[0]\t$row_rec[1]\tIN\t$row_rec[2]\t$row_rec[3]\n";
	}
 }
 close (FILE);
$uth_rec->finish();
}



############################################################

sub newzone 
{
my $conf="/named_path/etc/named.conf";
my @TABCONF = ();
my $newdom = "zone \"$domain\" \{ type master\; allow-query \{ can_query\; \}\; allow-transfer \{ can_axfr\; \}\; file \"masters\/$domain\"\; notify explicit\; \}\;\n";

# Find if zone is already in conf
open (CONF, "$conf") or die "Can't open this file";
foreach (<CONF>){
	push (@TABCONF,$_);
	}
close (CONF);
if (grep (/$domain/, @TABCONF)){
	print "domaine OK\n";
	}
	else {
		open (CONF, ">$conf");
push (@TABCONF,$newdom);
print CONF @TABCONF;	
close (CONF);
	}
}
