#!/usr/sbin/perl
use CGI qw(:standard);
use Net::LDAP;
use strict;
use vars qw($LDAPHOST $BASEDN $BINDBASE $BINDUID $ANONBINDDN $ZONEEDIT $DEFAULT_MAIN @our_nameserver @zoneinfo @setinfo);
my $LDAPHOST = "ldap0.server";
my $BASEDN = "ou=dns,o=tiscover";
my $BINDBASE = "ou=people,o=tiscover";
my $BINDUID = "uid";
my $ANONBINDDN = "ou=dns,o=tiscover";
my $ZONEEDIT = "zoneedit.pl";
my $DEFAULT_MAIN = "index.html";
my $LOGFILE = "/opt/httpd/logs/zoneedit.log";
my @our_nameserver = ( "ns1.tis.co.at", "ns2.tis.co.at" );
my @zoneinfo = qw( DNSzonename DNSserial DNSclass DNStype DNSexpire DNSretry DNSminimum DNSzonemaster DNSrefresh DNSadminmailbox DNSttl );
my @setinfo = qw( DNSdomainname DNStype DNSclass DNScname DNSipaddr DNSttl );
################################################################################
eval {
main();
};
if ($@) {
errconfirm($@);
}
sub main
{
my $request = Apache->request();
my $query = new CGI;
my $call = $query->param('call');
if (defined $call) {
my $ldap = Net::LDAP->new($LDAPHOST) or die "can't make new LDAP object: $@";
my $user = $request->connection->user();
my $binddn = $BINDUID."=".$user.",$BINDBASE";
my ($ret, $password) = $request->get_basic_auth_pw();
my $mesg = $ldap->bind($binddn, password => $password);
die "Unable to bind to LDAP server.
Reason: ".$mesg->error if ($mesg->code);
my $selet = $query->param('selet') if $query->param('selet');
if ($call eq "dnslist") {
dns_list($query, $ldap, $selet);
} elsif ($call eq "newzone") {
new_zone($query, $selet);
} elsif ($call eq "addzone") {
my $zonedn = add_zone($query, $ldap);
log_action($user, "add_zone", $zonedn);
$query->delete_all();
print $query->header, $query->start_html(-title=> 'Edit DNS Zone',
-target=> 'main',
-author=> 'jacob.rief@tiscover.com',
-BGCOLOR=> 'WHITE'),
"
| Add New Zone |
|---|
| - $let |
| + $let |
| "; } elsif (defined $ns[0] || defined $ns[1]) { print " |
| "; } else { print " |
| "; } } else { print " |
| "; } print "$zonename |
| Without DNS-lookup |
| New Zonename: | ", $query->textfield(-name=>'DNSzonename', -size=>40, -maxlength=>64), " | ||
| ", $query->submit(-name=>" Submit "), " | ", $query->reset(), " |
| Additional Zonename: | ", $query->textfield(-name=>"DNSzonename$zc", -default=>$zn, -size=>40, -maxlength=>64), " | ||
| Add additional Zonename: | ", $query->textfield(-name=>"DNSzonename$zc", -size=>40, -maxlength=>64), " |
| ", $query->submit(-name=>"modifyzone", -value=>" Modify Zone "), " | "; my $onclick = "if(confirm('Do you really want to remove zone \"$zonemaster\" and all its resource records?'))" ."{ parent.frames.menu.location='$ZONEEDIT?call=deletezone&zonedn=$zonedn&selet=$selet'; parent.frames.main.location='$DEFAULT_MAIN'; }"; print $query->submit(-name=>"deletezone", -value=>" Delete Zone ", -onClick=>$onclick), " | \n", $query->end_form(), "", $query->start_multipart_form(-method=>'POST', -action=>"$ZONEEDIT", -target=>'main'), $query->hidden('call'), $query->hidden('zonedn'), $query->hidden('selet'), $query->submit(-name=>"resetform", -value=>" Reset Form "), $query->end_form(), " |
| Name $#entries | Type | IPaddr | CNAME | TTL | |
|---|---|---|---|---|---|
| $domainname | ", "$type | ", "", $query->textfield(-name=>'DNSipaddr', -default=>$ipaddr, -size=>16, -maxlength=>16), " | ", "", $query->textfield(-name=>'DNScname', -default=>$cname, -size=>16, -maxlength=>64), " | ", "", $query->textfield(-name=>'DNSttl', -default=>$ttl, -size=>6, -maxlength=>6), " | ", "", $query->submit(-name=>"modifyrrset", -value=>" Modify "), $query->submit(-name=>"deleterrset", -value=>" Delete "), " | ", $query->end_form(), "
| ", textfield(-name=>'DNSdomainname', -size=>8, -maxlength=>32), " | ", "", $query->popup_menu(-name=>'DNStype', -values=>['CNAME','A','MX','NS','PTR','TXT'], -default=>"A"), " | ", "", textfield(-name=>'DNSipaddr', -size=>16, -maxlength=>16), " | ", "", textfield(-name=>'DNScname', -size=>16, -maxlength=>64), " | ", "", textfield(-name=>'DNSttl', -default=>"3600", -size=>6, -maxlength=>6), " | ", "", $query->submit(-name=>"addrrset", -value=>" Add "), " | ", $query->end_form(); print "