#!/usr/bin/perl

# dnsman 0.67 - editconfig.cgi
#
# Copyright (C) 2000,2001 Hampton Maxwell <maxwell@101freeway.com>
# See COPYRIGHT for details
#
# 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; under version 2 of the License. If you
# wish to use a later version, you must obtain permission from the author.
#
# 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, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

use CGI::Carp qw(fatalsToBrowser); # log errors to browser window

push (@INC,"."); # allow Htpasswd to be loaded

require './config.cgi';
require './functions.cgi';
require './writeconfig.cgi';

parse_form();
my $htaccess_phrase; # status report from changing htpasswd/htaccess

&html_header("Set DNS Defaults");

if ($FORM{'SUBMITTYPE'} eq "Apply") { 
	&write_config; 
	require './config.cgi'; # require again to pick up the new changes
}

elsif ($FORM{'SUBMITTYPE'} eq "Allow User Access") {
	$htaccess_phrase = &add_htuser($FORM{'HTACCESSUSER'}, $FORM{'HTACCESSPASS'}, $FORM{'HTACCESSPASS2'});
	print "<B>$htaccess_phrase</B><BR><BR>\n";
}

elsif ($FORM{'SUBMITTYPE'} eq "Remove User Access") {
	$htaccess_phrase = &delete_htuser($FORM{'CHANGEHTACCESSUSER'});
	print "<B>$htaccess_phrase</B><BR><BR>\n";
}

elsif ($FORM{'SUBMITTYPE'} eq "Modify User Password") {
	$htaccess_phrase = &change_htpass($FORM{'CHANGEHTACCESSUSER'}, $FORM{'ALTERHTPASSWD'}, $FORM{'ALTERHTPASSWD2'});
	print "<B>$htaccess_phrase</B><BR><BR>\n";
}

elsif ($FORM{'SUBMITTYPE'} eq "Allow IP Access") {
	$htaccess_phrase = &add_htaccessip($FORM{'HTACCESSIP'});
	print "<B>$htaccess_phrase</B><BR><BR>\n";
}

elsif ($FORM{'SUBMITTYPE'} eq "Remove IP Access") {
	$htaccess_phrase = &del_htaccessip($FORM{'REMOVEHTACCESSIP'});
	print "<B>$htaccess_phrase</B><BR><BR>\n";
}

my @htaccess_users = &read_htpasswd;
my @htaccess_ips = &read_htaccessips;

## Compatibility updates ##
# for 0.66 
if ($FORM{'SLAVE1'} && $FORM{'SLAVEWEB1'}) {
    $FORM{'SLAVE1URL'} = "http://$FORM{'SLAVE1'}/$FORM{'SLAVEWEB1'}";
}
if ($FORM{'SLAVE2'} && $FORM{'SLAVEWEB2'}) {
    $FORM{'SLAVE2URL'} = "http://$FORM{'SLAVE2'}/$FORM{'SLAVEWEB2'}";
}

print <<EDITCONFIG;
<BR><FORM Method=post Action=editconfig.cgi>
<FONT SIZE=+1><B>Set defaults (blanks are ok):</B></FONT>
<A HREF=usageguide.html#config>help</A>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE=submit NAME=SUBMITTYPE VALUE=Apply><BR>
Required fields appear in bold<BR>
<BR>
<B>Base directory of named records:</B> &nbsp;<INPUT TYPE=text SIZE=25 NAME=BASEDIR VALUE="$FORM{'BASEDIR'}"><BR>
<B>Named.conf location:</B> &nbsp;<INPUT TYPE=text SIZE=25 NAME=CONFLOCATION VALUE="$FORM{'CONFLOCATION'}"><BR>
Chroot'ed BIND 
<FONT SIZE=-1><A HREF=usageguide.html#chrootedbind>help</A></FONT>
<SELECT NAME=BINDCHROOT>
<OPTION SELECTED>$FORM{'BINDCHROOT'}
<OPTION>yes
<OPTION>no</SELECT><BR>
<INPUT TYPE=hidden NAME=CONFIGFILE VALUE="$FORM{'CONFIGFILE'}">
Refresh named method:
<FONT SIZE=-1><A HREF=usageguide.html#refreshmethod>help</A></FONT>
<SELECT NAME=REFRESHTYPE>
<OPTION SELECTED>$FORM{'REFRESHTYPE'}
<OPTION>ndc
<OPTION>killall
<OPTION>pid-file</SELECT><BR>
<BLOCKQUOTE>
Pid file location: <INPUT TYPE=text SIZE=28 NAME=PIDLOCATION VALUE="$FORM{'PIDLOCATION'}">
</BLOCKQUOTE>
Named version:
<FONT SIZE=-1><A HREF=usageguide.html#namedversion>help</A></FONT>
<SELECT NAME=BINDVERSION>
<OPTION SELECTED>$FORM{'BINDVERSION'}
<OPTION>BIND8
<OPTION>BIND9</SELECT><BR>
Auto-refresh named:
<FONT SIZE=-1><A HREF=usageguide.html#autorefresh>help</A></FONT>
<SELECT NAME=AUTOREFRESH>
<OPTION SELECTED>$FORM{'AUTOREFRESH'}
<OPTION>yes
<OPTION>no</SELECT><BR>
Auto-update serial number:
<FONT SIZE=-1><A HREF=usageguide.html#autoserial>help</A></FONT>
<SELECT NAME=AUTOSERIAL>
<OPTION SELECTED>$FORM{'AUTOSERIAL'}
<OPTION>yes
<OPTION>no</SELECT><BR>
<B>Record directory 1: &nbsp;<INPUT TYPE=text SIZE=12 NAME=RECDIR1 VALUE="$FORM{'RECDIR1'}"><BR>
Record directory 2: &nbsp;<INPUT TYPE=text SIZE=12 NAME=RECDIR2 VALUE="$FORM{'RECDIR2'}"><BR>
Record directory 3: &nbsp;<INPUT TYPE=text SIZE=12 NAME=RECDIR3 VALUE="$FORM{'RECDIR3'}"><BR>
Reverse record directory: &nbsp;<INPUT TYPE=text SIZE=12 NAME=REVDIR VALUE="$FORM{'REVDIR'}"><BR>
</B>
Type of extensions: &nbsp;<SELECT NAME=EXTENSION>
<OPTION SELECTED>$FORM{'EXTENSION'}
<OPTION>prefix and suffix
<OPTION>prefix
<OPTION>suffix
<OPTION>neither</SELECT><BR>
Default record prefix: &nbsp;<INPUT TYPE=text SIZE=7 NAME=PREFIX VALUE="$FORM{'PREFIX'}"><BR>
Default record suffix: &nbsp;<INPUT TYPE=text SIZE=7 NAME=SUFFIX VALUE="$FORM{'SUFFIX'}"><BR>
Reverse record prefix: &nbsp;<INPUT TYPE=text SIZE=7 NAME=REVPREFIX VALUE="$FORM{'REVPREFIX'}"><BR>
Reverse record suffix: &nbsp;<INPUT TYPE=text SIZE=7 NAME=REVSUFFIX VALUE="$FORM{'REVSUFFIX'}"><BR>
<BR>
<B>Appearance:</B>
<FONT SIZE=-1><A HREF=usageguide.html#appearance>help</A></FONT><BR>
<BLOCKQUOTE>
Edit Record text box size -
(Default is 80x24 (fits 800x600 displays)
<BLOCKQUOTE>
Columns: <INPUT TYPE=text SIZE=4 NAME=EDITCOLS VALUE="$FORM{'EDITCOLS'}"><BR>
Rows: &nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE=text SIZE=4 NAME=EDITROWS VALUE="$FORM{'EDITROWS'}">
<BR></BLOCKQUOTE>
Disable pulldown menu in Edit / Delete Zone
<FONT SIZE=-1><A HREF=usageguide.html#nodomainlist>help</A></FONT>
<SELECT NAME=NODOMAINLIST>
<OPTION SELECTED>$FORM{'NODOMAINLIST'}</OPTION>
<OPTION>Yes</OPTION>
<OPTION>No</OPTION>
</SELECT><BR>
</BLOCKQUOTE>
<BR>
<B>Master server information</B> (to pull records from as secondary):<BR>
<BLOCKQUOTE>
Always show master dialog:
<FONT SIZE=-1><A HREF=usageguide.html#showdialog>help</A></FONT>
<SELECT NAME=SHOWMASTER>
<OPTION SELECTED>$FORM{'SHOWMASTER'}
<OPTION>yes
<OPTION>no</SELECT><BR>
Address of master nameserver (leave blank if master): &nbsp;<INPUT TYPE=text SIZE=20 NAME=MASTER VALUE="$FORM{'MASTER'}"><BR>
Query master and generate zonefile
<FONT SIZE=-1><A HREF=usageguide.html#slaveslurp>help</A></FONT>
<SELECT NAME=SHOWMASTER>
<OPTION SELECTED>$FORM{'SHOWMASTER'}</OPTION>
<OPTION>yes</OPTION>
<OPTION>no</OPTION></SELECT><BR>
</BLOCKQUOTE>
<BR>
<B>Timeouts information:</B><BR>
<BLOCKQUOTE>
Always show Timeouts dialog: 
<FONT SIZE=-1><A HREF=usageguide.html#showdialog>help</A></FONT>
<SELECT NAME=SHOWTIMEOUTS>
<OPTION SELECTED>$FORM{'SHOWTIMEOUTS'}
<OPTION>yes
<OPTION>no</SELECT><BR>
Refresh: &nbsp;<INPUT TYPE=text SIZE=10 NAME=REFRESH VALUE="$FORM{'REFRESH'}">
&nbsp;&nbsp;&nbsp;&nbsp;
Retry: &nbsp;<INPUT TYPE=text SIZE=10 NAME=RETRY VALUE="$FORM{'RETRY'}"><BR>
Expire: &nbsp;<INPUT TYPE=text SIZE=10 NAME=EXPIRE VALUE="$FORM{'EXPIRE'}">
&nbsp;&nbsp;&nbsp;&nbsp;
TTL: &nbsp;<INPUT TYPE=text SIZE=10 NAME=TTL VALUE="$FORM{'TTL'}"><BR>
Max TTL: &nbsp;<INPUT TYPE=text SIZE=10 NAME=TOP_TTL VALUE="$FORM{'TOP_TTL'}"><BR>
</BLOCKQUOTE>
<BR>
<B>Nameserver information:</B><BR>
<BLOCKQUOTE>
Always show Nameserver dialog:
<FONT SIZE=-1><A HREF=usageguide.html#showdialog>help</A></FONT>
<SELECT NAME=SHOWNS>
<OPTION SELECTED>$FORM{'SHOWNS'}
<OPTION>yes
<OPTION>no</SELECT><BR>
Authoritative host: &nbsp;<INPUT TYPE=text SIZE=30 NAME=AUTHHOST VALUE="$FORM{'AUTHHOST'}"><BR>
Administrative Contact (use . in place of @): &nbsp;<INPUT TYPE=text SIZE=30 NAME=CONTACT VALUE="$FORM{'CONTACT'}"><BR>
Nameserver 1 name: &nbsp;<INPUT TYPE=text SIZE=30 NAME=NS1 VALUE="$FORM{'NS1'}"><BR>
Nameserver 2 name: &nbsp;<INPUT TYPE=text SIZE=30 NAME=NS2 VALUE="$FORM{'NS2'}"><BR>
Nameserver 3 name: &nbsp;<INPUT TYPE=text SIZE=30 NAME=NS3 VALUE="$FORM{'NS3'}"><BR>
</BLOCKQUOTE>
<BR>
<B>Zone creation host defaults:</B><BR>
<BLOCKQUOTE>
MX 1: &nbsp;<INPUT TYPE=text SIZE=30 NAME=MX1 VALUE="$FORM{'MX1'}">&nbsp;&nbsp;&nbsp;
Priority: &nbsp;<INPUT TYPE=text SIZE=4 NAME=MX1PRI VALUE="$FORM{'MX1PRI'}"><BR>
MX 2: &nbsp;<INPUT TYPE=text SIZE=30 NAME=MX2 VALUE="$FORM{'MX2'}">&nbsp;&nbsp;&nbsp;
Priority: &nbsp;<INPUT TYPE=text SIZE=4 NAME=MX2PRI VALUE="$FORM{'MX2PRI'}"><BR>
MX 3: &nbsp;<INPUT TYPE=text SIZE=30 NAME=MX3 VALUE="$FORM{'MX3'}">&nbsp;&nbsp;&nbsp;
Priority: &nbsp;<INPUT TYPE=text SIZE=4 NAME=MX3PRI VALUE="$FORM{'MX3PRI'}"><BR>
<BR>
Default www target: &nbsp;<INPUT TYPE=text SIZE=20 NAME=WWWIP VALUE="$FORM{'WWWIP'}">
Type: <SELECT NAME=WWWIPTYPE>
<OPTION SELECTED>$FORM{'WWWIPTYPE'}</OPTION>
<OPTION>A</OPTION>
<OPTION>CNAME</OPTION>
<OPTION VALUE="">No Default</OPTION>
</SELECT><BR>
Default ftp target: &nbsp;<INPUT TYPE=text SIZE=20 NAME=FTPIP VALUE="$FORM{'FTPIP'}">
Type: <SELECT NAME=FTPIPTYPE>
<OPTION SELECTED>$FORM{'FTPIPTYPE'}</OPTION>
<OPTION>A</OPTION>
<OPTION>CNAME</OPTION>
<OPTION VALUE="">No Default</OPTION>
</SELECT><BR>
Default mail target: &nbsp;<INPUT TYPE=text SIZE=20 NAME=MAILIP VALUE="$FORM{'MAILIP'}">
Type: <SELECT NAME=MAILIPTYPE>
<OPTION SELECTED>$FORM{'MAILIPTYPE'}</OPTION>
<OPTION>A</OPTION>
<OPTION>CNAME</OPTION>
<OPTION VALUE="">No Default</OPTION>
</SELECT><BR>
Default smtp target: &nbsp;<INPUT TYPE=text SIZE=20 NAME=SMTPIP VALUE="$FORM{'SMTPIP'}">
Type: <SELECT NAME=SMTPIPTYPE>
<OPTION SELECTED>$FORM{'SMTPIPTYPE'}</OPTION>
<OPTION>A</OPTION>
<OPTION>CNAME</OPTION>
<OPTION VALUE="">No Default</OPTION>
</SELECT><BR><BR>
Default domain of reverse hosts: 
<INPUT TYPE=text SIZE=30 NAME=REVDOMAIN VALUE="$FORM{'REVDOMAIN'}"><BR><BR>
<B>Execute commands after zone creation (add websites, mail accounts, etc):</B>
<FONT SIZE=-1><A HREF=usageguide.html#execcommand>help</A></FONT>
<SELECT NAME=ALLOWEXEC>
<OPTION SELECTED>$FORM{'ALLOWEXEC'}</OPTION>
<OPTION>yes</OPTION>
<OPTION>no</OPTION>
</SELECT><BR>
<BLOCKQUOTE>
Command 1:&nbsp;
<INPUT TYPE=text NAME=EXEC1 SIZE=30 VALUE="$FORM{'EXEC1'}">
<BR>
Command 2:&nbsp;
<INPUT TYPE=text NAME=EXEC2 SIZE=30 VALUE="$FORM{'EXEC2'}">
<BR><BR></BLOCKQUOTE>
<B>Secondary Updating Information:</B>
<FONT SIZE=-1><A HREF=usageguide.html#secondupdate>help</A></FONT><BR>
<BLOCKQUOTE>
Use secondary updating: <SELECT NAME=SLAVEUPDATE>
<OPTION SELECTED>$FORM{'SLAVEUPDATE'}</OPTION>
<OPTION>yes</OPTION>
<OPTION>no</OPTION>
</SELECT><BR><BR>
Update using DNSMan options:
<FONT SIZE=-1><A HREF=usageguide.html#dnsmanupdate>help</A></FONT><BR>
<BLOCKQUOTE>
IP address of master (this machine): <INPUT TYPE=text NAME=CREATORIP VALUE="$FORM{'CREATORIP'}" SIZE=20><BR>
<BR>
Name of slave server 1: &nbsp;<INPUT TYPE=text NAME=SLAVE1 VALUE="$FORM{'SLAVE1'}" SIZE=30><BR>
URL of dnsman on slave 1: <INPUT TYPE=text NAME=SLAVE1URL VALUE="$FORM{'SLAVE1URL'}" SIZE=35><BR>
Directory to write records to on slave 1: <INPUT TYPE=text NAME=SLAVEDIR1 VALUE="$FORM{'SLAVEDIR1'}" SIZE=12><BR>
<BR>
Name of slave server 2: &nbsp;<INPUT TYPE=text NAME=SLAVE2 VALUE="$FORM{'SLAVE2'}" SIZE=30><BR>
URL of dnsman on slave 2: <INPUT TYPE=text NAME=SLAVE2URL VALUE="$FORM{'SLAVE2URL'}" SIZE=35><BR>
Directory to write records to on slave 2: <INPUT TYPE=text NAME=SLAVEDIR2 VALUE="$FORM{'SLAVEDIR2'}" SIZE=12><BR>
</BLOCKQUOTE>
<BR>
Update using AutoDNS options: <FONT SIZE=-1><A HREF=usageguide.html#autodns>help</A></FONT><BR>
<BLOCKQUOTE>
AutoDNS target email address #1: <INPUT TYPE=text NAME=AUTODNS1 VALUE="$FORM{'AUTODNS1'}" SIZE=25><BR>
AutoDNS target email address #2: <INPUT TYPE=text NAME=AUTODNS2 VALUE="$FORM{'AUTODNS2'}" SIZE=25><BR>
<B>PGP key id:</B> <INPUT TYPE=text NAME=PGPKEYID VALUE="$FORM{'PGPKEYID'}" SIZE=25><BR>
<B>PGP key password:</B> <INPUT TYPE=pasword NAME=PGPPASS VALUE="$FORM{'PGPPASS'}" SIZE=15><BR>
<B>PGP keyring location (must be DNSMan-readable)</B>:
<INPUT TYPE=text NAME=KEYRINGLOC VALUE="$FORM{'KEYRINGLOC'}" SIZE=25><BR>
PGP program location: <INPUT TYPE=text NAME=PGPLOC VALUE="$FORM{'PGPLOC'}" SIZE=25><BR>
<B>Version of PGP program:</B> <SELECT NAME=PGPVERSION>
<OPTION SELECTED>$FORM{'PGPVERSION'}</OPTION>
<OPTION>GPG</OPTION>
<OPTION VALUE=PGP2>PGP 2.6</OPTION>
<OPTION VALUE=PGP5>PGP 5</OPTION>
<OPTION VALUE=PGP6>PGP 6</OPTION>
</SELECT><BR>
</BLOCKQUOTE>
</BLOCKQUOTE>
<BR>
<b>Security Information</b><br>
<blockquote>Prevent users from editing named.conf
<font size=-1><a href=usageguide.html#htaccess>help</a></font><br>
<select name="writenamed_conf">
<option selected>$FORM{'WRITEABLE_NAMEDCONF'}</option>
<option>yes</option>
<option>no</option>
</select>
</blockquote>
<br>
EDITCONFIG

print <<HTACCESS;
<B>Access restriction using .htaccess/.htpasswd (off if no users/ips added):</B>
<FONT SIZE=-1><A HREF=usageguide.html#htaccess>help</A></FONT><BR>
<BLOCKQUOTE>
<B>Passwords:</B><BR>
Add a user: <INPUT TYPE=text SIZE=15 NAME=HTACCESSUSER><BR>
Password: <INPUT TYPE=password SIZE=15 NAME=HTACCESSPASS><BR>
Repeat: <INPUT TYPE=password SIZE=15 NAME=HTACCESSPASS2>
&nbsp;<INPUT TYPE=submit NAME=SUBMITTYPE VALUE="Allow User Access"><BR>
<BR>
Change user access: <SELECT NAME=CHANGEHTACCESSUSER>
HTACCESS

foreach $ht_user (@htaccess_users) {
	print "<OPTION>$ht_user</OPTION>\n";
}

print <<PASSWDACCESS;
</SELECT>
&nbsp;<INPUT TYPE=submit NAME=SUBMITTYPE VALUE="Remove User Access"><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
New password: <INPUT TYPE=password SIZE=15 NAME=ALTERHTPASSWD><BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Repeat: <INPUT TYPE=password SIZE=15 NAME=ALTERHTPASSWD2>
&nbsp;<INPUT TYPE=submit NAME=SUBMITTYPE VALUE="Modify User Password"><BR>
<BR>
<B>Restrict access based on IP/hostname:</B><BR>
Add an IP/hostname: <INPUT TYPE=text SIZE=15 NAME=HTACCESSIP>
&nbsp;<INPUT TYPE=submit NAME=SUBMITTYPE VALUE="Allow IP Access"><BR>
<BR>
Revoke access for the IP/hostname:
<SELECT NAME=REMOVEHTACCESSIP>
PASSWDACCESS

foreach $ht_ip (@htaccess_ips) {
	print "<OPTION>$ht_ip</OPTION>\n";
}

print <<IPACCESS;
</SELECT>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<INPUT TYPE=submit NAME=SUBMITTYPE VALUE="Remove IP Access"><BR>
</BLOCKQUOTE>
<BR>
<INPUT TYPE=submit NAME=SUBMITTYPE VALUE=Apply><BR>
</FORM>
IPACCESS

&html_footer;
exit;
